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 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.