我正在尝试使用__getattribute__
访问类的属性时打印某些内容
这里的一个大问题是递归和我重写getattribute方法的事实。
恐怕我必须使用元类来解决这个问题。 无论如何,如果你对这个问题有任何答案。
答案 0 :(得分:2)
__getattribute__
用于您实例上的所有属性访问。这包括该方法中的self.recursion
。
您很少需要使用__getattribute__
。如果你确实有一个正确的用例,请避免属性访问或使用super(A, self).__getattribute__()
来避免无限递归问题。
对于您的用例(在访问属性时打印内容),请使用super()
仍然返回原始属性:
class A(object):
def meth(self):
return "met"
def __getattribute__(self, name):
print "IN CLASS A"
return super(A, self).__getattribute__(name)
请注意,要使super()
正常工作,您需要使用继承自object
的新式类。如果你继承了其他东西,并且其他东西有__getattribute__
方法,那么它已经是一个新风格的类。