dir()
позволяет вам настроить атрибуты отчетов вашего объекта, определив __dir__()
.
Из руководства, если __dir__()
не определено:
Если объект является объектом модуля, список содержит имена атрибутов модуля.
Если объект является объектом типа или класса, список содержит имена его атрибутов и рекурсивных атрибутов его баз.
В противном случае список содержит имена атрибутов объекта, имена егоАтрибуты класса и рекурсивные атрибуты базовых классов его класса.
Это также то, что inspect.getmembers()
возвращает, за исключением того, что он возвращает кортежи (name, attribute)
вместо только имен.
object.__dict__
- это словарь вида {key: attribute, key2: atrribute2}
и т. Д.
object.__dict__.keys()
имеет то, чего не хватает двум другим.
Из документов на inspect.getmembers()
:
getmembers () не возвращает атрибуты метакласса, когда аргумент является классом (это поведение наследуется от функции dir ()).
Для int.__dict__.keys()
это
['__setattr__', '__reduce_ex__', '__reduce__', '__class__', '__delattr__', '__subclasshook__', '__sizeof__', '__init__']
Подводя итог, dir()
и inspect.getmembers()
являютсяв основном то же самое, тогда как __dict__
- это полное пространство имен, включая атрибуты метакласса.