在Python 3.x中继承python的对象是必要的还是有用的?

时间:2009-08-06 12:39:54

标签: python python-3.x

在较旧的python版本中,当你在python中创建一个类时,它可以继承自 object ,据我所知,这是一个特殊的内置python元素,允许你的对象成为一种新风格对象

新版本(> 3.0和2.6)怎么样?我用google搜索了类对象,但是得到了很多结果(显而易见的原因)。任何提示?

感谢!

2 个答案:

答案 0 :(得分:65)

您不需要继承object以在python 3中使用新样式。所有类都是新式的。

答案 1 :(得分:53)

我意识到这是一个古老的问题,但值得注意的是,即使在python 3中,这两件事情也不尽相同。

如果您明确继承自object,那么您实际所做的就是继承builtins.object ,无论当时指向的是什么。

因此,我可能有一些(非常古怪)模块由于某种原因覆盖对象。我们称之为第一个模块“newobj.py”:

import builtins

old_object = builtins.object  # otherwise cyclic dependencies

class new_object(old_object):

    def __init__(self, *args, **kwargs):
        super(new_object, self).__init__(*args, **kwargs)
        self.greeting = "Hello World!" 

builtins.object = new_object  #overrides the default object

然后在其他文件中(“klasses.py”):

class Greeter(object):
    pass

class NonGreeter:
    pass

然后在第三个文件中(我们实际可以运行):

import newobj, klasses  # This order matters!

greeter = klasses.Greeter()
print(greeter.greeting)  # prints the greeting in the new __init__

non_greeter = klasses.NonGreeter()
print(non_greeter.greeting) # throws an attribute error

所以你可以看到,在显式继承自object的情况下,我们得到的行为与允许隐式继承的行为不同。