一个简单的问题:我什么时候应该使用术语'class',什么时候应该在Python中使用术语'type'?
答案 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”。
但是你选择的并不重要。
{}
的类型为dict
。iteritems()
类的dict
方法返回一个迭代器。
答案 3 :(得分:0)
您可以说运行时的对象是某种单一类型,但通过(多)继承,它可以被视为属于多个类。
答案 4 :(得分:0)
这可能无法直接回答您的问题,但它可能会让您了解类型和类之间的区别。
class Card:
def __init__(self, suit=0, rank=0):
self.suit = suit
self.rank = rank
card1 = Card()
Card
是一个类对象,因此其类型为type
。
但是,card1
是Card
的一个实例,因此其类型为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' ) )
上述代码生成的 this
和 that
是相同的,都是 type
类的实例。您或许可以说它们是 type
类型的实例。 x = this()
是 this
类/类型的实例。
x = this()
assert type(this) is type
assert type(x) is this