3

这有什么区别:

class ThisIsAClass(object)
    pass

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

和这个?

class ThisIsAClass()
    pass

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

3 回答 3

5

它的声明类型不同。新式类继承自对象,或从另一个新式类。

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 只有新式类。

于 2013-02-12T17:30:33.360 回答
1

继承自的一个object使用新式类,而另一个使用旧式类。许多日常用户不会注意到差异,但是在多重继承以及可以使用什么样的漂亮装饰器方​​面存在很大差异。egproperty只能用于新式类。

这些天建议您使用新样式的类,因此我发现始终从对象继承是一个好习惯,除非您真的有充分的理由避免它。还要注意,如果你曾经切换到 python3.x,你所有的类都会自动变成新样式,所以最好现在就习惯它们:)。

于 2013-02-12T17:24:15.510 回答
1

第一个是新式类,第二个是旧式类。有关它们的差异,请参阅文档

于 2013-02-12T17:24:18.443 回答