为什么下面的类声明继承自对象?

class MyClass(object):
    ...

当前回答

是的,这是历史性的。如果没有它,它将创建一个老式类。

如果对旧样式对象使用type(),则只需获得“instance”。在一个新型对象上,您可以得到它的类。

其他回答

是的,这是历史性的。如果没有它,它将创建一个老式类。

如果对旧样式对象使用type(),则只需获得“instance”。在一个新型对象上,您可以得到它的类。

是的,这是一个“新样式”对象。这是python2.2中引入的一项功能。

新样式对象的对象模型与经典对象不同,有些东西不能与旧样式对象一起正常工作,例如super()、@property和描述符。有关新样式类的详细描述,请参阅本文。

关于区别的描述:Python中的旧样式类和新样式类之间的区别是什么?

艰难学习Python的历史:

Python对一个类的原始呈现在许多严重方面被破坏方法。当这个故障被识别出来时,已经太晚了,为了解决这个问题,他们需要一些“新班级”的风格,以便“旧班级”继续工作但您可以使用更正确的新版本。他们决定使用小写的“对象”一词从中继承以创建类的“类”。这令人困惑,但是类继承自名为“object”的类它不是一个对象,实际上是一个类,但不要忘记继承来自对象。

同样,为了让您知道新式类和旧式类之间的区别,新式类总是从对象类或从从对象继承的另一个类继承:

class NewStyle(object):
    pass

另一个例子是:

class AnotherExampleOfNewStyle(NewStyle):
    pass

虽然老式基类看起来像这样:

class OldStyle():
    pass

一个老式的儿童班是这样的:

class OldStyleSubclass(OldStyle):
    pass

您可以看到,OldStyle基类不会从任何其他类继承,但是,OldStyle类当然可以彼此继承。从对象继承可以保证某些功能在每个Python类中都可用。Python 2.2中引入了新的样式类

类创建语句的语法:

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开发者的眼泪。