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
相关产品推荐
相关产品推荐

