Почему я не могу получить доступ к атрибуту instance .__ class__ в Python? - PullRequest
0 голосов
/ 14 мая 2010

Я новичок в Python и знаю, что мне не хватает чего-то довольно простого, но почему не работает этот очень-очень простой код?

class myClass:
    pass

testObject = myClass
print testObject.__class__

Я получаю следующую ошибку:

AttributeError: class myClass has no attribute '__class__'

Разве у каждого объекта в Python нет атрибута __class__?

Ответы [ 3 ]

3 голосов
/ 14 мая 2010

Кажется, я осознал свою ошибку. Я думал, что код testObject = myClass создает новый экземпляр / объект класса, но фактически назначает ссылку на сам класс. Я изменил код на:

class myClass: 
    pass 

testObject = myClass() 
print testObject.__class__ 

и теперь он работает так, как я ожидал

2 голосов
/ 14 мая 2010

Большинство, но не все объекты в Python имеют атрибут __class__. Обычно вы можете получить к нему доступ, чтобы определить класс объекта.

Вы можете получить класс любого объекта, вызвав для него type.

>>> class myClass:
...     pass
... 
>>> testObject = myClass
>>> type(testObject)
<type 'classobj'>
1 голос
/ 14 мая 2010

Классы старого стиля не имеют атрибута __class__.

class myClass(object):
    pass
...