Вопрос по python, oop – Разница между объектом и экземпляром в Python?

17

Это происходит в python2.7

Я работаю над идеей метакласса в Python, почти все учебники ссылаются на объект как экземпляр класса в Python. Однако, играя с классом A (): форма определения класса, я увидел это:

class ClsDef1():
    pass
C1 = ClsDef1()
print C1
<__main__.ClsDef1 instance at 0x2aea518>

class ClsDef2(object):
    pass
C2 = ClsDef2()
print C2
<__main__.ClsDef2 object at 0x2ae68d0>

Это означает, что при создании экземпляра из класса, который не является неотъемлемой частью объекта, экземпляр является экземпляром, но когда класс является неотъемлемой частью объекта, экземпляр класса является объектом?

Кто-нибудь может объяснить разницу? В реальной жизни, какой я должен использовать?

Спасибо!

Python 2 или Python 3? В последнем случае они действительно эквивалентны (и вы можете опустить скобки, если не называете базовый класс). user395760
возможный дубликатOld style and new style classes in Python Martijn Pieters♦
stackoverflow.com/a/6380430/1318661 Вот достойный ответ. ulu5

Ваш Ответ

3   ответа
3

В Python все объекты имеют тип (возвращаемый типом (x)), который также является объектом.
если 't' является объектом типа, тогда его тип является специальным типом «тип». Таким образом (тип (тип (x)) является типом) всегда True. В старых классах пользователь определял «класс» является объектом типа "classobj"; - и каждый экземпляр любого класса является объектом типа «экземпляр». То есть есть два встроенных типа «classobj»; и «экземпляр»; которые реализуют классы. Связь между экземпляром и его классом осуществляется через__class__ член.

С новыми классами: пользовательские классы на самом деле являются объектами нового типа (их типом является «тип», а не «classobj»), и когда вы создаете их экземпляры, тип () каждого экземпляра является объектом класса. Таким образом, объекты различных пользовательских классов теперь имеют разные типы. И классы в основном на том же основании, что и все встроенные типы; со старыми классами существует отдельная структура для экземпляра класса и типа объекта, новые классы используют тип объекта для обоих типов.

В документах гораздо больше, но в этом суть.

2

является синонимом «объекта». Думайте об этом так: объекты являются экземплярами типов. Таким образом, «42 является экземпляром типа int» эквивалентно «42 - объект int». Я обычно использую «экземпляр» и & quot; объект & quot; взаимозаменяемые.

12

которая подробно объясняетсяв документации, По сути, в Python 2.x вы должны всегда наследовать от объекта, чтобы получить класс нового стиля. В Python 3 классы старого стиля полностью исчезли.

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