тип класса в питоне - PullRequest
       40

тип класса в питоне

1 голос
/ 08 октября 2010

почему, если я делаю:

class C(): pass
type(C())

Я получил: <type 'instance'>, но если я сделаю:

class C(object): pass
type(c())

Я получил: <class '__main__.c'>?

Первый не очень удобный

Ответы [ 2 ]

2 голосов
/ 08 октября 2010

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

Все объекты старого стиля были реализованы со встроенным экземпляром типа. Тот факт, что они все еще являются значениями по умолчанию, а их тип остается «экземпляром», является результатом мер предосторожности в отношении ретро-совместимости.

Это извлечено из документов Python (http://docs.python.org/reference/datamodel.html)

3,3. Классы нового стиля и классы Классы и экземпляры бывают двух вкусы: старый стиль (или классический) и новый стиль.

До Python 2.1, классы старого стиля были единственным вкусом, доступным для пользователь. Концепция (старого стиля) класса не имеет отношения к понятию типа: если х является экземпляром старого стиля класс, то х. класс обозначает класс х, но тип (х) всегда , Это отражает Дело в том, что все экземпляры в старом стиле, независимо от их класса, являются реализовано с помощью одного встроенного тип, называемый экземпляр.

Новые классы были введены в Python 2.2 для унификации классов и типов. Класс нового стиля - это не больше и не меньше, чем пользовательский тип. Если х экземпляр класса нового стиля, затем тип (х) обычно такой же, как x>. class (хотя это не гарантировано - новый стиль Экземпляр разрешено переопределить значение, возвращаемое для x. class ).

Основная мотивация для введения классы нового стиля, чтобы обеспечить единая объектная модель с полным мета-модель. Он также имеет ряд практические преимущества, такие как способность для подкласса большинства встроенных типов, или введение «дескрипторов», которые включают вычисляемые свойства.

По причинам совместимости классы по-прежнему в старом стиле по умолчанию. Новый стиль классы создаются путем указания другой класс нового стиля (то есть тип) в качестве родительского класса или «верхнего уровня тип », если нет другого родителя необходимо. Поведение нового стиля классы отличаются от старых занятия в ряде важных детали в дополнение к какому типу () возвращается. Некоторые из этих изменений фундамент для новой объектной модели, как то, как специальные методы вызывается. Другие «исправления», которые могли не будет реализовано раньше для проблемы совместимости, такие как порядок разрешения метода в случае множественное наследование.

Хотя данное руководство призвано обеспечить всеобъемлющий охват Python класс механики, это еще может быть не хватает в некоторых областях, когда речь идет о его освещение классов нового стиля. Посмотри пожалуйста http://www.python.org/doc/newstyle/ для источников дополнительной информации.

Классы старого стиля удаляются в Python 3.0, оставляя только семантику классов нового стиля. классов нового стиля.

1 голос
/ 08 октября 2010

Честно говоря, я не думаю, что здесь нужен короткий ответ.Я советую вам начать читать о классах унификации типов / новых стилях Python здесь: http://www.python.org/doc/newstyle/

...