反射:用字符串类型的名字去操作变量,没有安全问题。本质是反射对象中的属性和方法。
反射对对应的方法有:getattr, setattr, delattr
getattr
class A: def func(self): print('in func') a = A() a.name = 'alex' a.age = 63 # 反射对象的属性 ret = getattr(a,'name') # 通过变量名的字符串形式取到的值 print(ret) print(a.__dict__) ###打印属性与方法 print(a.__dir__())
class A: a_list =[1, 3, 5, 7, 9] @classmethod def func(cls): print(cls.a_list) @staticmethod def func2(): print(A.a_list, "太好了") print(getattr(A, 'a_list')) print(getattr(A, 'func')()) getattr(A, 'func2')()
【注】反射类的方法只支持 :classmethod staticmethod,不支持类函数
# import mymodule # 反射模块的属性 # print(my.day) # print(getattr(mymodule,'day')) # 反射模块的方法 # getattr(mymodule,'wahaha')() ################# def func(): print('func111111') year = 2018 # 反射自己模块中的变量 print(getattr(sys.modules['__main__'],'year')) # 反射自己模块中的函数 getattr(sys.modules['__main__'],'func')() 变量名 = input('>>>') print(getattr(sys.modules[__name__],变量名)) # 内置模块 # time # asctime # import time # print(getattr(time,'time')()) # print(getattr(time,'asctime')())