当我通过使用访问类的属性时,我试图打印一些东西__getattribute__
这里的大问题是递归,我正在覆盖 getattribute 方法。
恐怕我必须使用元类来解决这个问题。无论如何,如果你对这个问题有任何答案。
当我通过使用访问类的属性时,我试图打印一些东西__getattribute__
这里的大问题是递归,我正在覆盖 getattribute 方法。
恐怕我必须使用元类来解决这个问题。无论如何,如果你对这个问题有任何答案。
__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__
方法,它已经是一个新样式的类。