反射2
反射
反射是用字符串类型的名字去操作变量。注意eval的区别。
eval是将支付串的代码进行执行。具有非常大的安全隐患。
但是反射就非常完美的解决了这个问题,反射没有安全问题。
反射对象中的属性和方法。
getattr
class A: def func(self): print('套你大象') a = A() a.name = 'alxe' # 反射对象属性 ret = getattr(a,'name')#通过变量名的字符串形式取到值 print(ret)
hasattr
class A: def func(self): print('套你大象') a = A() a.name = 'alxe' # 反射对象属性 ret = hasattr(a,'name')#判断这个变量是否在对象中 print(ret)
返回的是bool值。
还有delattr和setattr。上节已更。
反射对象的方法
与反射对象的属性不同的是,当你反射方法时需要进行调用。
class A: def func(self): print('套你大象') a = A() a.name = 'alxe' # 反射对象属性 ret = getattr(a,'func')#判断这个变量是否在对象中 ret()
其他三种调用方法是一样的。
反射类的属性和类的方法。(classmethod staticmethod)
class A: a = 20 def func(self): print('套你大象') print(getattr(A,'a'))
于此类推,我们可以得出反射类的方法。