Python:术语“类”VS“类型”

Posted

技术标签:

【中文标题】Python:术语“类”VS“类型”【英文标题】:Python : terminology 'class' VS 'type' 【发布时间】:2011-05-08 22:25:56 【问题描述】:

只是一个简单的问题:什么时候应该使用术语“类”,什么时候应该在 Python 中使用术语“类型”?

“class”仅适用于用户定义的类型,“type”适用于内置类型? 或者现在everything is a type ...即使对于用户定义的类,我是否应该始终使用“类型”? ... ?

【问题讨论】:

【参考方案1】:

它或多或少具有历史意义:they used to be different 很久以前,不再具有实际意义。

编辑:我在提及具体实现时使用“class”,在谈到高级数据结构、应用程序架构等时,我以更非正式的方式使用“type”。在我的想法一个类型是一个更普遍的东西,我不认为每个类都是一个不同的类型。

此外,当我使用元类(很少)时,我会提到类型。

【讨论】:

还有你自己,你什么时候使用其中一个?【参考方案2】:

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

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

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

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

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

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

【讨论】:

【参考方案3】:

我使用“类型”来指代一般情况,但当我谈到属性时,我会切换到“类”。

但你选择哪个并不重要。

的类型为 dictdict 类的iteritems() 方法返回一个迭代器。

【讨论】:

好吧...我只是想知道这一点,因为奇怪的是 1 事物会有 2 个名称...尤其是对于像 Python 这样非常简洁的语言! 等到你点击“constructor”与“initializer”。 "constructor" vs. "initializer" 一点也不令人困惑。 __new__ 是构造函数,__init__ 是初始化器。 @aaronsterling:不,不是这样。【参考方案4】:

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

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

Card是一个类对象,所以它的类型是type

但是,card1Card 的一个实例,所以它的类型是Card

【讨论】:

嗯……你也可以说“Card 是一个类型的实例”而不是“Card 是一个类对象”,我们回到正题!仍然不需要“类”这个词;)【参考方案5】:

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

【讨论】:

否,因为“通过多重继承”它也属于所有这些类型。你会选择它属于哪一种类型?类is 类型。 我喜欢运行时方面;创建新类型时,它是一个类,而在创建具体类时,它是一个类型。【参考方案6】:

在python代码中typeobject,但classkeyword,因此,根据上下文,这些词可以有不同的含义。对此有更深入了解的人似乎对此感到满意。

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

【讨论】:

以上是关于Python:术语“类”VS“类型”的主要内容,如果未能解决你的问题,请参考以下文章

非关联数组的术语是啥?

在实例化类之前在 Python 类中定义的方法的正确术语是啥?

对象 vs 类 vs 函数

Python面向对象编程03:类继承和其衍生术语

Python面向对象编程03:类继承和其衍生术语

Python类和对象_调试与术语