class Foo:
pass
>>> f = test.Foo()
Давайте рассмотрим экземпляр класса...
>>> dir(f)
['__add__', [__class__] ...]
Оооо! Давайте рассмотрим метаданные экземпляра класса...
>>> dir(f.__class__)
['__add__', [__class__] ...]
хм... ожидал атрибутов __class__
; но возвращает атрибуты f
Попытка хита и испытания...
>>> dir(f.__class__.__class__)
['__abstractmethods__', '__base__' ...]
хм... почему дважды обаяние?
dir(f)
и dir(f.__class__)
показывают атрибуты двух разных вещей. Это просто, что ваш пустой объект имеет те же атрибуты, что и его собственный класс. Попробуй это:
>>> class Foo:
... def __init__(self):
... self.a = 17
...
>>> f = Foo()
>>> 'a' in dir(f)
True
>>> 'a' in dir(f.__class__)
False
dir(f.__class__)
и dir(f.__class__.__class__)
? (Я знаю, что __name__
и __bases__
являются __class__
но я не вижу его в f.__class__
)