我正在尝试在python中使用 getattribute 方法。
class Foo:
def __init__(self):
self.x = 3
def __getattribute__(self, name):
print("getting attribute %s" %name)
return super().__getattribute__(self, name)
f = Foo()
f.x
我得到了"获取属性"打印出来,但这里也是一个TypeError:预期1个参数,得到2。
那么,这个片段有什么问题?
答案 0 :(得分:0)
super().__getattribute__(self, name)
将此更改为super().__getattribute__(name)
这将解决您的问题。我希望这会有所帮助。
答案 1 :(得分:0)
您的问题是,当您致电self
时,您正在通过super()
。
self
是一个自动填充的变量,无论何时使用。因此,super()
会在遇到基本方法时分配给self
。因此,您实际传递给该方法的是__getattribute__(super(), self, name)
。 Python非常聪明,可以忽略计数中的self
,这就是错误2
而不是3
的原因。
这将解决您的问题:
class Foo:
def __init__(self):
self.x = 3
def __getattribute__(self, name):
print("getting attribute %s" %name)
return super().__getattribute__(name)
f = Foo()
f.x