1

当我通过使用访问类的属性时,我试图打印一些东西__getattribute__ 这里的大问题是递归,我正在覆盖 getattribute 方法。

恐怕我必须使用元类来解决这个问题。无论如何,如果你对这个问题有任何答案。

4

1 回答 1

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__方法,它已经是一个新样式的类。

于 2014-06-04T13:42:30.340 回答