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 一词。
广告