每个对象都有一个__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‘时,它会停止吗?
发布于 2017-08-08 14:58:26
您正在接受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中的每个对象都有一个 attribute,它总是一个可调用的对象。
注意:属性查找的方式使绑定方法对象链保持活动,因此最终会耗尽内存;每个__dir__方法包装器在其__self__属性中引用前面的方法对象。
https://stackoverflow.com/questions/45571722
复制相似问题