每个对象都有一个__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 '附加?
答案 0 :(得分: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>
Python中的每个对象都有__dir__
attribute,它始终是可调用的。
注意:连接属性查找的方式会使绑定的方法对象链保持活动状态,因此最终会耗尽内存;每个__dir__
方法包装器引用其__self__
属性中的前一个。