为了更好地理解这个问题,下面是一个示例:
class Parent:
def __getattribute__(self, attr):
print('ha!')
return super().__getattribute__(attr)
class Bar(Parent):
my_attr = 'hi'
test = Bar()
print("----------")
print(test.my_attr)
在此示例中,Bar
对象具有不可更改的Parent
超类。
总是在我读取Bar
类型的对象的属性时,此属性首先通过超类__getattribute__
的{{1}}。
该代码的打印结果为:
Parent
但是如何不经过----------
ha!
hi
的{{1}}来读取test
的原始值?
答案 0 :(得分:3)
您可以致电object.__getattribute__(test, 'my_attr')
或super(Parent, test).__getattribute__('my_attr')
。
未经测试。但是我已经在转置对象演示中使用了它。要访问对象的属性,这些对象将替代对集合调用的所有访问。