Python:术语'类'VS'类型'

时间:2010-11-12 07:46:39

标签: python class types terminology

一个简单的问题:我什么时候应该使用术语'class',什么时候应该在Python中使用术语'type'?

  • 仅适用于用户定义的类型,'type'适用于内置类型?
  • 或现在everything is a type ...即使用户定义的类,我也应该使用'type'吗?
  • ......?

6 个答案:

答案 0 :(得分:15)

它或多或少具有历史性:they used to be different很久以前,它已经没有实际意义了。

编辑:在提及具体实施时使用“class”,而在谈到高级数据结构时,我使用“type”,应用程序结构在我的思考中,类型是一个更普遍的东西,我不认为每个类都是一个独特的类型。

另外,当我使用元类(很少)时,我会说类型。

答案 1 :(得分:11)

class 是一个Python数据结构,可以通过调用它来用作该类实例的模板,例如foo = Foo()

type 是一个类,可以通过继承作为其他类的模板,例如class Foo(Bar):

由于Python支持继承,因此所有类都可以用作其他类的模板,这意味着所有类实际上都是类型。

自从object派生的“新式类”出现以来,尤其如此,它将用户定义类的类型层次结构与内置类型统一起来。类总是类型,但现在它们是与内置类型相同的类型

虽然Python类是类型,但我仍然觉得这个区别很有用,所以这些术语在我看来并不完全是同义词。

奖金定义:元类是一个类,其实例是类。在Python中,这些必须从type类派生,就像新样式对象派生自object.

一样

答案 2 :(得分:3)

我使用“type”来指代一般情况,但在谈到属性时我会切换到“class”。

但是你选择的并不重要。

  

{}的类型为dictiteritems()类的dict方法返回一个迭代器。

答案 3 :(得分:0)

您可以说运行时的对象是某种单一类型,但通过(多)继承,它可以被视为属于多个类。

答案 4 :(得分:0)

这可能无法直接回答您的问题,但它可能会让您了解类型和类之间的区别。

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

Card是一个类对象,因此其类型为type

但是,card1Card的一个实例,因此其类型为Card

答案 5 :(得分:0)

在python代码中,type是一个object,而class是一个keyword,因此,根据上下文,这些词可以有不同的含义。有更深入了解的人似乎对此感到满意。

type 对象用于提供与 class 关键字等效的功能。

class Base(object):
    _about_base = 'An attribute of Base'
 
class MyClass(Base):
    about_myclass = 'An attribute of myclass'

that = MyClass

this = type( 'MyClass', (Base,), dict( about_myclass='An attribute of myclass' ) )
上述代码生成的

thisthat 是相同的,都是 type 类的实例。您或许可以说它们是 type 类型的实例。 x = this()this 类/类型的实例。

x = this()
assert type(this) is type
assert type(x) is this