#wrpme包装类
class wrapme:
def __init__(self,obj):
self.__data = obj
def get(self):
return self.__data
def __repr__(self):
return str(self)
def __str__(self):
return str(self.__data)
def __getattr__(self,arrt):
return getattr(self.__data, arrt) #调用getattr,返回包装的数据的arrt属性
com = wrapme(3 + 5j)
print (com.real) #调用__getattr__方法,查找实例的real属性
#com.some_attribute #字典里没有some_attribute属性.查找失败,抛出AttributeError异常
def foo():
print ("属性可以是数据属性,还可以是函数方法")
class test():
def __init__(self):
pass
def __getattr__(self, arrt):
return foo #所有属性都被重定向到了foo方法
t = test()
t.some_attribute() #通过__getattr__,在实例的属性字典里查打some_attribute属性
#结论: 像t.some_attribute() 一个实例调用子函数some_attribute,是通过__getattr__方法的在字典里查打的,这个属性可以是某数据.或者是函数方法,反正是Python的某个对象就是了
python的__getattr__方法
最新推荐文章于 2023-12-31 19:45:02 发布