反射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'))

于此类推,我们可以得出反射类的方法。

 

posted @ 2019-10-10 22:04  套你大象  阅读(92)  评论(0编辑  收藏  举报