Python中对象和实例的区别?

问题描述 投票:0回答:3

这发生在python2.7中

我正在研究Python中元类的想法,几乎所有教程都将对象称为Python中类的实例。然而,当使用 class A(): 定义类的形式时,我看到了这个:

class ClsDef1():
    pass
C1 = ClsDef1()
print C1
<__main__.ClsDef1 instance at 0x2aea518>

class ClsDef2(object):
    pass
C2 = ClsDef2()
print C2
<__main__.ClsDef2 object at 0x2ae68d0>

这意味着当从不是对象固有的类创建实例时,该实例是一个实例,但是当一个类是从对象固有的时,该类的实例是一个对象?

谁能解释一下其中的区别吗?在现实生活中我应该使用哪一个?

谢谢!

oop python-2.x
3个回答
12
投票

这是新式类和旧式类之间的区别,在文档中对此进行了非常详细的解释。基本上,在 Python 2.x 中,您应该确保始终从 object 继承,以便获得新样式的类。在 Python 3 中,旧式类已经完全消失。


4
投票

简短回答:在 python 中,所有对象都有一个类型(由 type(x) 返回),它也是一个对象。
如果“t”是类型对象,则其类型是特殊类型“type”。所以 (type(type(x)) is type) 始终为 True。 在旧类中,用户定义的“类”是“classobj”类型的对象 - 任何类的每个实例都是“实例”类型的对象。 IE。有两个内置类型“classobj”和“instance”实现类。从实例到其类的链接是通过其

__class__
成员实现的。

对于新类:用户定义的类实际上是新类型对象(它们的类型是“type”,而不是“classobj”),当您创建它们的实例时,每个实例的 type() 就是类对象。因此,不同用户定义类的对象现在具有不同的类型。类与所有内置类型的基础基本相同;对于旧类,实例->类和对象->类型有单独的结构,新类对两者都使用对象->类型。

文档中还有更多内容,但这就是核心。


2
投票

与“类”和“类型”之间的歧义不同,“实例”与“对象”同义。这样想:对象是类型的实例。因此,“42 是 int 类型的实例”相当于“42 是 int 对象”。我通常交替使用“实例”和“对象”。 引用来源:https://eli.thegreenplace.net/2012/03/30/python-objects-types-classes-and-instances-a-glossary

© www.soinside.com 2019 - 2024. All rights reserved.