A class - это структура данных Python, которую можно использовать в качестве шаблона для экземпляров этого класса, вызывая его, например, foo = Foo()
.
A type - это класс, который можно использовать в качестве шаблона для дополнительных классов посредством наследования, например, class Foo(Bar):
Поскольку Python поддерживает наследование, все классы могут использоваться в качестве шаблонов для дополнительных классов, что означает, что все классы на самом деле являются типами.
Это особенно верно с момента появления «классов нового стиля», производных от object
, которые объединяют иерархию типов пользовательских классов со встроенными типами. Классы всегда были типами, но теперь они того же типа , что и встроенные типы.
Хотя классы Python являются типами, я все же нахожу это различие полезным, поэтому эти термины не являются полностью синонимами в моей голове.
Определение бонуса: метакласс - это класс, экземплярами которого являются классы. В Python они должны быть получены из класса type
, так же как объекты нового стиля получены из object.