【问题标题】:Difference between object and instance in python?python中对象和实例的区别?
【发布时间】:2012-05-25 17:46:32
【问题描述】:

这发生在 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>

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

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

谢谢!

【问题讨论】:

标签: python oop


【解决方案1】:

这就是新式和旧式类的区别,in the documentation解释的很详细。基本上,在 Python 2.x 中,您应该确保始终从 object 继承,以便获得新样式的类。在 Python 3 中,旧式类已完全消失。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-22
        • 1970-01-01
        • 2014-04-08
        • 2010-11-15
        • 2020-04-21
        • 2011-09-25
        • 2013-02-11
        相关资源
        最近更新 更多