Python 中旧式类和新式类有什么区别?

pythonserver side programmingprogramming

在 Python 2.x 中,根据是否存在内置类型作为基类,有两种类型的类 −

"经典"类型或旧式类没有内置类型作为基类:
>>> class OldSpam:      # 没有基类
...     pass
>>> OldSpam.__bases__
()

"新"类型的类:它们有一个内置类型作为基类,这意味着,直接或间接地,它们有一个对象作为基类 −

>>> class NewSpam(object):           # 直接从对象继承
...    pass
>>> NewSpam.__bases__
(<type 'object'>,)
>>> class IntSpam(int):            # 间接从对象继承...
...    pass
>>> IntSpam.__bases__
(<type 'int'>,)
>>> IntSpam.__bases__[0].__bases__   # ... 因为 int 继承自 object
(<type 'object'>,)

编写类时,人们总是希望使用新式类。这样做的优点很多,下面列出其中一些 −

支持描述符。具体来说,使用描述符可以实现以下构造 −

classmethod − 接收类作为隐式参数而不是实例的方法。

staticmethod − 不接收隐式参数 self 作为第一个参数的方法。

properties with property:创建用于管理属性的获取、设置和删除的函数。

Python 3.x 仅隐式支持新式类。在类声明中无需在括号中提及 object 一词。  


相关文章


有用资源