You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中是否存在不具备__dir__()方法的对象?

关于Python中__dir__()方法的疑惑解答

首先,你提到的文档表述其实是严谨的,虽然所有类默认继承自object且拥有__dir__()方法,但确实存在实例无法访问该方法的场景,主要有两种情况:

  • 主动删除类或实例的__dir__方法:你可以通过delattr移除类的__dir__属性,这样它的实例就无法继承到这个方法。比如:

    class MyClass:
        pass
    
    delattr(MyClass, '__dir__')
    obj = MyClass()
    hasattr(obj, '__dir__')  # 返回False
    

    这时调用dir(obj)会触发默认的 fallback 逻辑,而不是调用对象自身的__dir__方法。

  • 自定义__getattribute__方法导致方法无法被获取:如果某个类重写了__getattribute__方法,并且在实现中阻止了对__dir__的访问,那么实例看起来就像没有这个方法。比如:

    class MyClass:
        def __getattribute__(self, name):
            if name == '__dir__':
                raise AttributeError
            return super().__getattribute__(name)
    
    obj = MyClass()
    hasattr(obj, '__dir__')  # 返回False
    

文档里的表述是为了覆盖所有可能的情况——哪怕默认情况下所有对象都有__dir__,但开发者可以通过上述方式移除或隐藏它,这时dir()函数就会使用自身的默认逻辑来生成属性列表,而不是调用对象的__dir__方法。

内容的提问来源于stack exchange,提问作者maskalev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 00:18:10