在Python 3.x中继承Python的object是否必要或有用?
在旧版本的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
这个类继承才能使用新式类。实际上,所有的类都是新式类。