В чем разница между объектом и типом в Python
У нас есть два типа классов в Python 2.x, как все знают, как классы старого стиля и новые классы стиля
class OldStyle:
pass
type
экземпляров классов Old style всегда instance
class NewStyle(object):
pass
Новые классы стиля имеют преимущество method descriptors
, super
, getattribute
и т. д. type
экземпляров классов NewStyle является само имя класса
когда вы проверяете тип класса NewStyle является типом и типом object
также тип
In [5]: type(NewStyle)
Out[5]: type
In [6]: type(object)
Out[6]: type
In [7]: type(type)
Out[7]: type
Итак, какова концепция наследования новых стилевых классов от object
как мы видели выше, type(type)
это также type
а также type(object)
это также type
Почему мы не можем наследовать новые классы стилей напрямую от type
?
Можем ли мы предположить, что приведенные ниже пункты различают object
а также type
?
- Если мы наследуем / создаем класс из
type
как показано ниже, мы обязательно будем создавать метакласс? (Все объекты в Python, включая классы, являются объектами некоторого другого класса, которыйtype
)
class NewStyle(type):
pass
Когда интерпретатор Python видит приведенный выше код, он создает объект / экземпляр типа class
(объект класса) с именем NewStyle (который является не обычным экземпляром, а объектом класса)
- Если мы наследуем / создаем класс из
object
, это создаст нормальный экземпляр / объект класса
class NewStyle(object):
pass
isinstance(NewStyle, type)
obj = NewStyle()
print isinstance(obj, NewStyle) # True
print isinstance(NewStyle, type) #True
print isinstance(NewStyle, object) #True
print isinstance(object, type) # True
print isinstance(type, object) # True
Итак, наконец, мы используем type
создавать классы, но мы используем object
создавать экземпляры?