反射哈哈
一. 模块里的反射
run.py
# by luffycity.com from types import FunctionType import handler while True: print(""" 系统支持的函数有: 1. f1 2. f2 3. f3 4. f4 5. f5 """) val = input("请输入要执行的函数:") # val = "f1" # 错误 因为val是字符串 # handler.val() if hasattr(handler,val): func_or_val = getattr(handler,val) # 根据字符串为参数,去模块中寻找与之同名的成员。 if isinstance(func_or_val,FunctionType): func_or_val() else: print(func_or_val) else: print('handler中不存在输入的属性名') # 正确方式 """ if val == 'f1': handler.f1() elif val == 'f2': handler.f2() elif val == 'f3': handler.f3() elif val == 'f4': handler.f4() elif val == 'f5': handler.f5() """
handler
f0 = 9 def f1(): print('F1') def f2(): print('F2') def f3(): print('F3') def f4(): print('F4') def f5(): print('F5')
二.. 类里面的反射
1.
# by luffycity.com class Foo(object): country = "中国" def func(self): pass v = getattr(Foo,'func') # Foo.func # 根据字符串为参数(第二个参数),去类中寻找与之同名的成员。 print(v) # <function Foo.func at 0x0000017EFD5F81E0> obj = Foo() v = getattr(obj,"func") # obj.func # 根据字符串为参数(第二个参数),去对象中寻找与之同名的成员。 print(v) # <bound method Foo.func of <__main__.Foo object at 0x0000017EFD77C278>>
2.
# class Account(object): # func_list = ['login', 'logout', 'register'] # # def login(self): # """ # 登录 # :return: # """ # print('登录111') # # def logout(self): # """ # 注销 # :return: # """ # print('注销111') # # def register(self): # """ # 注册 # :return: # """ # print('注册111') # # def run(self): # """ # 主代码 # :return: # """ # print(""" # 请输入要执行的功能: # 1. 登录 # 2. 注销 # 3. 注册 # """) # # choice = int(input('请输入要执行的序号:')) # func_name = Account.func_list[choice-1] # # # func = getattr(Account,func_name) # Account.login #函数 self需要自己传 # # func(self) #self 是 obj1 # # func = getattr(self, func_name) # self.login #方法 self 不用自己传 # func() # # obj1 = Account() # obj1.run() # # obj2 = Account() # obj2.run()
补充:
""" getattr # 根据字符串的形式,去对象中找成员。 hasattr # 根据字符串的形式,去判断对象中是否有成员。 setattr # 根据字符串的形式,去判断对象动态的设置一个成员(内存级别设置后看不见) delattr # 根据字符串的形式,去判断对象动态的设置一个成员(内存删除之后看不见) """ import xx # getattr v1 = getattr(xx,'x1') print(v1) v2 = getattr(xx,'f1') v2('杨森') # hasattr v3 = hasattr(xx,'x1') print(v3) # v4 = hasattr(xx,'f1') # v4 = hasattr(xx,'f1') # v5 = hasattr(xx,'xxxxxxx') # print(v3,v4,v5) # # # setattr # setattr(xx,'x2',999) # v6 = getattr(xx,'x2') # print(v6) # # setattr(xx,'f2',lambda x:x+1) # v7 = getattr(xx,'f2') # v8 = v7(1) # print(v8) # delattr delattr(xx,'x1') v9 = getattr(xx,'x1') print(v9)

浙公网安备 33010602011771号