这有什么区别:
class ThisIsAClass(object)
pass
print ThisIsAClass()
>> <__main__.ThisIsAClass object at 0x7f0128a8fd10>
和这个?
class ThisIsAClass()
pass
print ThisIsAClass()
>> <__main__.ThisIsAClass instance at 0x7f0128a8fd10>
它的声明类型不同。新式类继承自对象,或从另一个新式类。
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 中引入了新型类来统一类和类型。一种新式类,既不超过也不少于用户定义的类型。Ifx
是新式类的实例,则type(x)
与x.__class__
.
引入新型类的主要动机是提供具有完整元模型的统一对象模型。
出于兼容性原因,默认情况下类仍然是旧式的。
Python 3 只有新式类。
继承自的一个object
使用新式类,而另一个使用旧式类。许多日常用户不会注意到差异,但是在多重继承以及可以使用什么样的漂亮装饰器方面存在很大差异。egproperty
只能用于新式类。
这些天建议您使用新样式的类,因此我发现始终从对象继承是一个好习惯,除非您真的有充分的理由避免它。还要注意,如果你曾经切换到 python3.x,你所有的类都会自动变成新样式,所以最好现在就习惯它们:)。
第一个是新式类,第二个是旧式类。有关它们的差异,请参阅文档。