访问属性时打印一些东西

时间:2014-06-04 13:39:47

标签: python getattribute

我正在尝试使用__getattribute__访问类的属性时打印某些内容 这里的一个大问题是递归和我重写getattribute方法的事实。

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

1 个答案:

答案 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__方法,那么它已经是一个新风格的类。