inspect.getmembers () vs __dict __. Items () vs dir ()

Кто-нибудь может объяснить мне адекватными примерами, в чем разница между ч / б

>>> import inspect
>>> inspect.getmembers(1)

и

>>> type(1).__dict__.items()

и

>>> dir(1)  

, за исключением того, что они показывают убывающее количество атрибутов и методов в указанном порядке. 1 - целое число (но может быть любого типа.)


РЕДАКТИРОВАТЬ

>>>obj.__class__.__name__  #gives the class name of object  
>>>dir(obj)                #gives attributes & methods  
>>>dir()                   #gives current scope/namespace
>>>obj.__dict__            #gives attributes
26
задан Jibin 3 June 2013 в 04:15
поделиться

1 ответ

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__ - это полное пространство имен, включающее атрибуты метакласса. 1127]

21
ответ дан 28 November 2019 в 17:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: