python中对象和实例之间的区别?

时间:2012-05-25 17:46:32

标签: python oop

这发生在python2.7

我正在研究python中的元类,几乎所有的教程都将对象作为类的实例引用,在python中。但是,在使用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>

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

有人可以解释这个区别吗?在现实生活中我应该使用哪一个?

谢谢!

3 个答案:

答案 0 :(得分:12)

这是新式和旧式课程之间的区别,详细解释了in the documentation。基本上,在Python 2.x中,您应确保始终从对象继承,以便获得新式类。在Python 3中,旧式类已完全消失。

答案 1 :(得分:3)

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

使用新类:用户定义的类实际上是新类型对象(它们的类型是'type',而不是'classobj'),当您创建它们的实例时,每个实例的type()都是类对象。因此,不同用户定义类的对象现在具有不同的类型。课程与所有内置类型基本相同;对于旧类,有一个单独的结构,例如&gt; class和object-&gt;类型,新类使用object-&gt;类型。

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

答案 2 :(得分:2)

与&#34; class&#34;之间的歧义不同。和&#34;键入&#34;,&#34;实例&#34;是&#34; object&#34;的同义词。可以这样想:对象是类型的实例。因此,&#34; 42是int&#34;类型的实例。相当于&#34; 42是一个int对象&#34;。我通常使用&#34;实例&#34;和&#34;对象&#34;互换。