2011-09-05 279 views
7

在我过去的一个问题中,回答者告诉我,当你想创建的类是从头开始的时候,最好从对象继承,而不需要从其他类继承。为什么继承对象类型

例如,像什么我总是这样:

class my_class: 
    "a class inherits from nothing" 
    def __init__(self): 
     pass 

对于他或她建议:

class suggested_class(object): 
    "a class inherits from object type" 
    def __init__(self): 
     pass 

我很困惑与这两种方法的优点或缺点。

问题1:

那么,什么是你的想法,从对象类型或没有继承?

+2

请参阅http://docs.python.org/release/2.2.3/whatsnew/sect-rellinks.html#SECTION000310000000000000000 – wim

+0

正如Marcello提到的,如果您有两个问题,请将此帖子限制为单个问题,并且[发布另一个问题](http://stackoverflow.com/questions/ask)。 – SingleNegationElimination

+0

你可以看看'dir(my_class)'和'dir(suggested_class)'。此外,如下所述,在Python3中两者都是相同的。 – steabert

回答

5

从nothing继承将创建一个旧式类,它具有与新式类不同的行为。我不记得刚才的具体细节(参见here的解释),但作为一般规则,没有理由支持旧式类,所以您应该始终从对象继承(如果没有其他)。

+4

有新风格类的原因是1:旧风格类的所有实例的类型是'classobj',这不是很有趣,2:老风格类的方法解析顺序被打破了多重继承。解决这些问题中的一个或两个会导致很多现有的代码停止工作,所以最简单的做法是创建一个不同类的类,因此是'object'。 – SingleNegationElimination

+1

@Token另外,在Python 3中,所有的类都回归到新的风格,而没有专门从'object'继承。 – Keith

+0

那么,老式的课程被打破了,py3故意打破了后面的兼容性,所以这是一个跳跃的好时机。 – SingleNegationElimination