Python 3.x 为什么;“对象”;在python中作为基类传递?

Python 3.x 为什么;“对象”;在python中作为基类传递?,python-3.x,inheritance,Python 3.x,Inheritance,本质上,使用基类“对象”定义类与不使用任何基类定义类有什么区别。我多次看到类是用基类“object”定义的 class MyClass(object): def __init__(self. *params): self.params = params 或者 class MyClass: def __init__(self. *params): self.params = params 在Python3.x中,这是当今事实上的语言,没有任何区别

本质上,使用基类“对象”定义类与不使用任何基类定义类有什么区别。我多次看到类是用基类“object”定义的

class MyClass(object):
    def __init__(self. *params):
        self.params = params
或者

class MyClass:
    def __init__(self. *params):
        self.params = params

在Python3.x中,这是当今事实上的语言,没有任何区别:要么从object显式继承,要么将基留空,这是完全一样的

然而,对于Python 2,这是另一个问题- 在语言演变为面向对象的SintAxis(即今天所谓的“经典类”)之后,人们考虑了继承机制、内存分配、对象初始化、属性检索等一系列更好的特性,然后在Python 2.2中引入了
Object
,作为所谓的基础Python2.x生命周期中的“新样式类”

所以,如果您看到一些应该在Python 2中运行的代码,而不是从对象继承的,几乎总是一个错误——这可能会导致在运行时发生难以发现的错误行为(例如
type(instance)
将无法正常工作,您不能使用描述符,例如“properties”等等)


然而,如上所述,Python3.0及以上版本中的所有类都是“新样式类”。当人们编写在Python2和Python3中都能正确运行的代码时,显式继承object是很有趣的——现在很少有项目关注保持Python2的兼容性,这就是为什么人们会看到越来越少的“object”作为新代码中的显式基。

在Python3.x中,这是当今事实上的语言,没有任何区别:要么从object显式继承,要么将基保留为空是完全一样的

然而,对于Python 2,这是另一个问题- 在语言演变为面向对象的SintAxis(即今天所谓的“经典类”)之后,人们考虑了继承机制、内存分配、对象初始化、属性检索等一系列更好的特性,然后在Python 2.2中引入了
Object
,作为所谓的基础Python2.x生命周期中的“新样式类”

所以,如果您看到一些应该在Python 2中运行的代码,而不是从对象继承的,几乎总是一个错误——这可能会导致在运行时发生难以发现的错误行为(例如
type(instance)
将无法正常工作,您不能使用描述符,例如“properties”等等)

然而,如上所述,Python3.0及以上版本中的所有类都是“新样式类”。当人们编写在Python2和Python3中都能正确运行的代码时,显式继承object是很有趣的——现在很少有项目关注保持Python2的兼容性,这就是为什么人们会看到越来越少的“object”“作为新代码中的显式基础