类的对象和实例之间的区别

时间:2013-02-12 17:22:45

标签: python class object

这有什么区别:

class ThisIsAClass(object)
    pass

print ThisIsAClass()
>> <__main__.ThisIsAClass object at 0x7f0128a8fd10>

这个?

class ThisIsAClass()
    pass

print ThisIsAClass()
>> <__main__.ThisIsAClass instance at 0x7f0128a8fd10>

3 个答案:

答案 0 :(得分:5)

声明的类型不同。新式类继承自object或其他新式类。

class NewStyleClass(object):
    pass

class AnotherNewStyleClass(NewStyleClass):
    pass

旧式课没有。

class OldStyleClass():
    pass

好吧,新样式类继承自object或其他新样式类。

在Python 2.1之前,旧式类是用户可用的唯一风格。 (旧式)类的概念与类型的概念无关:如果x是旧式类的实例,则x.__class__指定x的类,但type(x)总是< type 'instance'>。这反映了这样一个事实,即所有旧式实例独立于其类,都使用一个称为实例的内置类型实现。

在Python 2.2中引入了新式类来统一类和类型。新式类既不多于也不少于用户定义的类型。如果x是新式课程的实例,则type(x)x.__class__相同。

引入新式类的主要动机是提供具有完整元模型的统一对象模型。

出于兼容性原因,默认情况下,类仍为旧式。

Python 3只有新式的类。

答案 1 :(得分:1)

继承自object的那个使用new-style类,而另一个使用旧式类。许多日常用户都不会注意到差异,但是在多重继承方面存在很大差异,您可以使用哪种漂亮的装饰器。例如property只能用于新式类。

现在建议你使用新式的类,所以我发现总是从对象继承是一个好习惯,除非你真的有充分的理由避免它。另请注意,如果您切换到python3.x,您的所有类将自动成为新式,因此现在最好习惯它们:)。

答案 2 :(得分:1)

第一个是新式课程,第二个是旧式课程。请参阅the documentation的差异。