python特殊方法__getattribute__

时间:2018-03-16 16:43:59

标签: python getattribute

我正在尝试在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。

那么,这个片段有什么问题?

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