在较旧的python版本中,当您在python中创建类时,它可以从object继承,据我所知,它内置了一个特殊的内置python元素,该元素允许您的对象成为新型对象。
较新的版本(> 3.0和2.6)呢?我搜索了有关类对象的信息,但得到了很多结果(由于明显的原因)。有什么提示吗?
谢谢!
在较旧的python版本中,当您在python中创建类时,它可以从object继承,据我所知,它内置了一个特殊的内置python元素,该元素允许您的对象成为新型对象。
较新的版本(> 3.0和2.6)呢?我搜索了有关类对象的信息,但得到了很多结果(由于明显的原因)。有什么提示吗?
谢谢!
Answers:
您无需继承object即可在python 3中具有新样式。所有类都是新样式。
object无论是否键入显式内容(object)
我意识到这是一个古老的问题,但是值得注意的是,即使在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
因此,您可以看到,在从对象显式继承对象的情况下,我们得到的行为与允许隐式继承的行为不同。