为了账号安全,请及时绑定邮箱和手机立即绑定

__dir__ 提供循环引用,但 dir() 可以

__dir__ 提供循环引用,但 dir() 可以

RISEBY 2022-06-28 17:04:50
我有以下类试图定义一个自定义__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__



查看完整回答
反对 回复 2022-06-28
  • 1 回答
  • 0 关注
  • 96 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信