为什么下面的类声明继承自对象?
class MyClass(object):
...
为什么下面的类声明继承自对象?
class MyClass(object):
...
当前回答
类创建语句的语法:
class <ClassName>(superclass):
#code follows
如果没有您特别希望从中继承的任何其他超类,则超类应该始终是对象,这是Python中所有类的根。
对象在技术上是Python中“新型”类的根源。但今天的新式阶级已经成为唯一的阶级。
但是,如果在创建类时没有显式使用object这个词,那么正如其他人提到的那样,Python3.x隐式继承自对象超类。但我想显性总是比隐性好(地狱)
参考
其他回答
是的,这是历史性的。如果没有它,它将创建一个老式类。
如果对旧样式对象使用type(),则只需获得“instance”。在一个新型对象上,您可以得到它的类。
艰难学习Python的历史:
Python对一个类的原始呈现在许多严重方面被破坏方法。当这个故障被识别出来时,已经太晚了,为了解决这个问题,他们需要一些“新班级”的风格,以便“旧班级”继续工作但您可以使用更正确的新版本。他们决定使用小写的“对象”一词从中继承以创建类的“类”。这令人困惑,但是类继承自名为“object”的类它不是一个对象,实际上是一个类,但不要忘记继承来自对象。
同样,为了让您知道新式类和旧式类之间的区别,新式类总是从对象类或从从对象继承的另一个类继承:
class NewStyle(object):
pass
另一个例子是:
class AnotherExampleOfNewStyle(NewStyle):
pass
虽然老式基类看起来像这样:
class OldStyle():
pass
一个老式的儿童班是这样的:
class OldStyleSubclass(OldStyle):
pass
您可以看到,OldStyle基类不会从任何其他类继承,但是,OldStyle类当然可以彼此继承。从对象继承可以保证某些功能在每个Python类中都可用。Python 2.2中引入了新的样式类
是的,这是一个“新样式”对象。这是python2.2中引入的一项功能。
新样式对象的对象模型与经典对象不同,有些东西不能与旧样式对象一起正常工作,例如super()、@property和描述符。有关新样式类的详细描述,请参阅本文。
关于区别的描述:Python中的旧样式类和新样式类之间的区别是什么?
类创建语句的语法:
class <ClassName>(superclass):
#code follows
如果没有您特别希望从中继承的任何其他超类,则超类应该始终是对象,这是Python中所有类的根。
对象在技术上是Python中“新型”类的根源。但今天的新式阶级已经成为唯一的阶级。
但是,如果在创建类时没有显式使用object这个词,那么正如其他人提到的那样,Python3.x隐式继承自对象超类。但我想显性总是比隐性好(地狱)
参考
Python 3
class MyClass(对象):=新样式类class MyClass:=新样式类(隐式继承自对象)
Python 2
class MyClass(对象):=新样式类class MyClass:=OLD-STYLE类
说明:
在Python3.x中定义基类时,允许从定义中删除对象。然而,这可能会为严重难以追踪的问题打开大门…
Python在Python2.2中引入了新的类,到目前为止,旧式类已经非常陈旧了。对旧式类的讨论被隐藏在2.x文档中,而在3.x文档中则不存在。
问题是,Python 2.x中旧式类的语法与Python 3.x中新式类的替代语法相同。Python 2.x仍然被广泛使用(例如GAE、Web2Py),任何代码(或编码器)无意中将3.x样式类定义引入2.x代码中都会导致一些严重过时的基本对象。而且,由于老式课程不在任何人的视野中,他们很可能不知道是什么击中了他们。
所以,只要把它拼出来,省去一些2.x开发者的眼泪。