為類別新增動態屬性
在使用類比類別模擬資料庫結果集時,出現了一個挑戰:如何指派動態屬性實例的屬性類似於字典的屬性。這涉及創建行為類似於具有特定值的屬性的屬性。
最初,一種有前途的方法涉及使用以下方式分配屬性:
setattr(self, k, property(lambda x: vs[i], self.fn_readyonly))
但是,這產生了屬性對象而不是所需的行為。
解決方案在於為類別本身新增屬性,而不是新增屬性至單一實例。它的工作原理如下:
class Foo(object): pass foo = Foo() foo.a = 3 Foo.b = property(lambda self: self.a + 1) print(foo.b) # Prints 4
在此範例中,我們使用屬性描述符將屬性 b 新增到類別 Foo 中。當存取 foo.b 時,Python 呼叫描述符的 __get__ 方法並將類別實例作為參數傳遞。然後 __get__ 方法傳回屬性的值,該值計算為 self.a 1。
屬性提供了一種方便的方法來定義屬性的自訂行為,有效地暴露了 Python OO 系統的管道。
以上是如何為字典條目等類別新增動態屬性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!