我有以下类试图定义一个自定义__getattribute__:class Item: def __init__(self): self.x = 1 def __dir__(self): return ['x'] def __getattribute__(self, i): if i not in dir(self): return "NOT DEFINED!" else: return super().__getattribute__(a)然后我可以很好地运行它:>>> i=Item()>>> i.x1>>> i.a'NOT DEFINED!'但是,如果我更改此行:if i not in dir(self):至:if i not in self.__dir__():我得到了一个RecursionError它似乎在自称的东西。为什么会这样,为什么dir()和不同__dir__()?
1 回答
弑天下
TA贡献1818条经验 获得超8个赞
__getattribute__
每当在对象上使用点表示法时都会调用该方法,因此会调用self.__dir__()
with作为参数的方法,然后使用您的代码再次调用该方法,然后使用相同的参数再次调用该方法,从而导致无休止的递归.__getattribute__
self
'__dir__'
self.__dir__()
__getattribute__
添加回答
举报
0/150
提交
取消