Fluent Python 讀書筆記(七)
動態屬性與特性
- 方法(method)只是一種可以被呼叫的屬性(attribute)
- 特性(property)可以用來代替公開的資料屬性,不會變動到類別介面
- 編寫動態屬性,是框架作者會採取的一種中繼編程(metaprogramming)
- 從任意來源產生或模擬動態屬性名稱,都要處理一個問題;原始資料中的 key 可能不適合當成屬性名稱,例如 key 是關鍵字(
keyword.iskeyword()
)或非法的識別符(s.isidentifier()
)
範例:使用動態屬性來探索 JSON 格式的資料
透過遞迴來建構,可自動處理嵌套的映射與串列
留意這裡沒有對查詢進行任何快取或轉換
建構實例的特殊方法是類別方法 __new__
,他可以回傳完全不同的實例,在這種情況下解譯器不會呼叫 __init__
以下為建構實例的虛擬程式
1 2 3 4 5 6 |
def obj_maker(the_class, some_arg): obj = the_class.__new__(some_arg) if isinstance(obj, the_class): the_class.__init__(obj, some_arg) return obj |