Python: терминология 'класс' VS 'тип' - PullRequest
35 голосов
/ 12 ноября 2010

Просто простой вопрос: когда я должен использовать термин «класс», а когда я должен использовать термин «тип» в Python?

  • - это «класс» только для пользовательских типови 'type' для встроенных типов?
  • или теперь, когда все является типом ... я должен всегда использовать 'type' даже для пользовательских классов?
  • ...?

Ответы [ 5 ]

15 голосов
/ 12 ноября 2010

Это более или менее исторически: они были разными давным-давно, что больше не имеет практических последствий.

Редактировать: Я использую "class" при обращении к конкретным реализациям и "type" в более неформальной форме, когда речь идет о структурах данных высокого уровня, архитектуре приложения и т. Д.В моем мышлении тип - это более общая вещь, я не считаю каждый класс отдельным типом.

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

11 голосов
/ 12 ноября 2010

A class - это структура данных Python, которую можно использовать в качестве шаблона для экземпляров этого класса, вызывая его, например, foo = Foo().

A type - это класс, который можно использовать в качестве шаблона для дополнительных классов посредством наследования, например, class Foo(Bar):

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

Это особенно верно с момента появления «классов нового стиля», производных от object, которые объединяют иерархию типов пользовательских классов со встроенными типами. Классы всегда были типами, но теперь они того же типа , что и встроенные типы.

Хотя классы Python являются типами, я все же нахожу это различие полезным, поэтому эти термины не являются полностью синонимами в моей голове.

Определение бонуса: метакласс - это класс, экземплярами которого являются классы. В Python они должны быть получены из класса type, так же как объекты нового стиля получены из object.

3 голосов
/ 12 ноября 2010

Я использую «тип» для обозначения общего случая, но переключаюсь на «класс», когда говорю об атрибутах.

Но на самом деле не имеет значения, какой вы выберете.

{} относится к типу dict. Метод iteritems() класса dict возвращает итератор.

0 голосов
/ 14 мая 2016

Это может не отвечать на ваш вопрос напрямую, но может дать вам представление о разнице между типом и классом.

class Card:
   def __init__(self, suit=0, rank=0):
      self.suit = suit
      self.rank = rank
card1 = Card()

Card является объектом класса, поэтому его тип type.

Однако card1 является экземпляром Card, поэтому его тип Card.

0 голосов
/ 12 ноября 2010

Можно сказать, что объект во время выполнения имеет определенный отдельный тип, но посредством (множественного) наследования его можно рассматривать как принадлежащий нескольким классам.

...