如果命令`dir(''._ dir __.__ dir __.__ dir __.__ dir __)`有一个结束来停止打印它的属性?

2 python python-internals

每个对象都有一个__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__']
Run Code Online (Sandbox Code Playgroud)

和,

>>> 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__']
Run Code Online (Sandbox Code Playgroud)

它会在足够的时候停止吗?dir '是附加的吗?

Mar*_*ers 7

你正在服用的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>
Run Code Online (Sandbox Code Playgroud)

Python中的每个对象都有一个__dir__属性,它始终是可调用的.

注意:连接属性查找的方式会使绑定的方法对象链保持活动状态,因此最终会耗尽内存; 每个__dir__方法包装器在其__self__属性中引用前一个方法.