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


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

"classic" style or old style classes have no built-in type as a base class:
>>> class OldSpam:      # no base class
...     pass
>>> OldSpam.__bases__
()

“新式”类:它们具有内置类型作为基类,这意味着它们直接或间接地以 object 作为基类。

>>> class NewSpam(object):           # directly inherit from object
...    pass
>>> NewSpam.__bases__
(<type 'object'>,)
>>> class IntSpam(int):              # indirectly inherit from object...
...    pass
>>> IntSpam.__bases__
(<type 'int'>,)
>>> IntSpam.__bases__[0].__bases__   # ... because int inherits from object
(<type 'object'>,)

在编写类时,始终希望使用新式类。这样做的好处很多,列举其中一些:

支持描述符。具体来说,描述符使得以下结构成为可能:

classmethod - 一种将类而不是实例作为隐式参数接收的方法。

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

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

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

更新于:2020-06-15

519 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告