在Python 3.x中继承Python的object是否必要或有用?

109 投票
2 回答
27236 浏览
提问于 2025-04-15 13:25

在旧版本的Python中,当你创建一个类时,可以让它继承自object。我理解这个object是Python里一个特别的内置元素,它让你的类变成一种新的风格的类。

那么在更新的版本(比如3.0以上和2.6)呢?我在网上查了关于object类的资料,但结果太多了(这很正常)。

2 个回答

94

我知道这个问题已经有点老了,但值得注意的是,即使在 Python 3 中,这两者也并不完全相同。

如果你明确地从 object 继承,实际上你是在从 builtins.object 继承,无论当时它指向什么。

因此,我可以有一个(非常奇怪的)模块,出于某种原因重写了 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 继承的情况下,我们得到的行为与允许隐式继承的情况是不同的。

118

在Python 3中,你不需要从object这个类继承才能使用新式类。实际上,所有的类都是新式类。

撰写回答