dir()和__dir__的区别与联系[Python3 学习笔记]

340 阅读1分钟

dir()__dir__是伴生关系. 当dir()调用某个对象时,这个对象的的__dir__函数会被运行并返回一个可迭代的序列,dir()根据__dir__`返回的序列生成一个排序后的list对象.

我们可以根据这2个函数获取某个对象里面的全部的属性(methodfield)

class Demo:
    def __init__(self, name: str):
        self._name = name

    def __str__(self):
        return f"Demo instance {self._name=}"

    def __repr__(self):
        return f"Demo instance repr {self._name=}"

    def say_hello(self):
        return f"hello {self._name}"
    

d = Demo("thinktik")

print(dir(d))

返回

['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_name', 'say_hello']