Preface
Python 下一切皆對象,每個對像都有多個屬性 (attribute),Python 對屬性有一套統一的管理方案。__dict__ 與 dir() 的區別:
並不是所有對像都擁有 __dict__ 屬性。許多內建類型就沒有 __dict__ 屬性,如 list,此時就需要用 dir() 來列出對象的所有屬性。
__dict__ 屬性
__dict__ 是用來存儲對象屬性的一個字典,其鍵為屬性名,值為屬性的值. 假設我們有 class A 如下:
- class A(object):
- class_var = 1
- def __init__(self):
- self.name = 'xy'
- self.age = 2
- @property
- def num(self):
- return self.age + 10
- def fun(self):pass
- @staticmethod
- def static_f():pass
- @classmethod
- def class_f(cls):pass
從上述代碼可知,
dir() 函數
dir() 是 Python 提供的一個API函數,dir() 函數會自動尋找一個對象的所有屬性 (包括從父類中繼承的屬性)。一個實例的 __dict__ 屬性僅僅是那個實例的實例屬性的集合,並不包含該實例的所有有效屬性。所以如果想獲取一個對象所有有效屬性,應使用 dir()。簡單測試如下:
vars() 函數
vars() 函數返回對象 object 的屬性和屬性值的字典對象. 測試如下:
Supplement
* Python's Instance, Class, and Static Methods Demystified
沒有留言:
張貼留言