В чем разница между объектом и типом в 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?

  1. Если мы наследуем / создаем класс из type как показано ниже, мы обязательно будем создавать метакласс? (Все объекты в Python, включая классы, являются объектами некоторого другого класса, который type)

class NewStyle(type): pass

Когда интерпретатор Python видит приведенный выше код, он создает объект / экземпляр типа class(объект класса) с именем NewStyle (который является не обычным экземпляром, а объектом класса)

  1. Если мы наследуем / создаем класс из 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 создавать экземпляры?

0 ответов

Другие вопросы по тегам