这发生在python2.7
我工作在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>
这意味着,当创建一个类,它是不是从物体固有的实例是一个实例的实例,但是,当一个类是对象固有的类的实例是对象?
任何人都可以解释的区别? 在现实生活中的哪一个,我应该使用?
谢谢!
这间新的风格和老式类,这是在非常详细的解释差异的文档中 。 基本上,在Python 2.x的,你应该确保你总是从对象继承,让你得到一个新式类。 在Python 3,老式类已经完全消失。
简短的回答:在Python中,所有对象都有一个类型(由式(X)返回),这也是一个目的。
如果“T”是一种类型的对象,则其类型是特殊类型的“类型”。 所以(类型(Type(X))是类型)总是真。 在旧的类,定义“类”用户的类型是“classobj”的对象 - 和任何类的每个实例是类型“实例”的对象。 即有两个内置类型“classobj”和“实例”,其实现类。 从实例到它的类的连接是通过其__class__
构件。
随着新的类:用户定义的类实际上是新型的对象(其类型是“型”,而不是“classobj”),当你创建它们,类型()的情况下,每个实例的是类对象。 因此,不同的用户定义的类的对象,现在有不同的类型。 和类都在基本相同的基础,因为所有内置类型; 与老班有一个为实例 - >类和对象 - >型的独立结构,新的类使用对象 - >型两种。
有一个在文档得多,但是这是它的核心。
没有什么不同“类”和“类型”之间的模糊性,“实例”是同义的“对象”。 想想这样说:对象的类型的实例。 所以,“42是int类型的实例”等同于“42是一个int对象”。 我通常使用“实例”和“对象”互换。