当我使用__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__
方法,那么它已经是一个新式类。
关于python - 访问属性时打印一些内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24039036/