如果命令 `dir(' '.__dir__.__dir__.__dir__.__dir__)` 停止打印其属性?

if there is an end for the command `dir(' '.__dir__.__dir__.__dir__.__dir__)` to stop printing its attributes?

每个对象都有一个 __dir__ 属性,如果附加了额外的 .__dir__ 引用,命令会停止吗?

>>> dir(''.__dir__)
['__call__', '__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__self__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__text_signature__']

并且

>>> dir(''.__dir__.__dir__.__dir__.__dir__)
['__call__', '__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__self__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__text_signature__']

当附加了足够多的 '.dir' 时它会停止吗?

您正在获取 __dir__ 属性的 dir(),这是一个 builtin_function_or_method 对象,它具有 __dir__ 属性。所以是的,您可以无休止地链接那些 __dir__ 属性查找,因为结果总是相同的;绑定方法对象:

>>> ''.__dir__.__dir__
<built-in method __dir__ of builtin_function_or_method object at 0x10672cfc0>
>>> ''.__dir__.__dir__.__dir__
<built-in method __dir__ of builtin_function_or_method object at 0x1067361f8>

Python 中的每个 对象都有一个 __dir__ attribute,它总是可调用的。

注意:您 st运行g 属性查找的方式使绑定方法对象链保持活动状态,因此您最终会 运行 内存不足;每个 __dir__ 方法包装器在它们的 __self__ 属性中引用前一个。