python物件轉字典的兩種實現方式示例
阿新 • • 發佈:2020-01-09
本文例項講述了python物件轉字典的兩種實現方式。分享給大家供大家參考,具體如下:
一. 方便但不完美的__dict__
物件轉字典用到的方法為__dict__. 比如物件物件a的屬性a.name='wk',a.age=18,那麼如果直接將使用a.__dict__獲得對應的字典的值為: {name: 'wk',aget:18},很方便,但是也存在一些限制. 其不完美之處在於:
比如:
class A(object): name = 'wukt' age = 18 def __init__(self): self.gender = 'male' a = A() print(a.__dict__)
此時的列印結果是:
{gender: 'male'}
但是類變數name和age無法一同轉換.
二. 使用dict
使用dict的方式如下,如果直接使用會報錯.
a = A() dict(a)
使用dict之時,將自動呼叫類中的keys方法,keys中定義了字典的鍵,呼叫keys方法後,程式將依照字典取值的方式嘗試獲得這些鍵對應的值.
當使用如字典的取值方式時: 比如a['name'],將會呼叫類中的__getitem__方法,__getitem__方法決定了這個值是多少.
因此只需要在一例中新增兩個方法就可以使物件可以通過dict轉字典:
def keys(self): return ('name','age' ) def __getitem__(self,item): return getattr(self,item)
通過這種方式,既可以支援類變數的轉換,又可以自定義需要轉換的欄位.
完整程式碼:
class A(object): name = 'wukt' age = 18 def __init__(self): self.gender = 'male' def keys(self): '''當對例項化物件使用dict(obj)的時候,會呼叫這個方法,這裡定義了字典的鍵,其對應的值將以obj['name']的形式取,但是物件是不可以以這種方式取值的,為了支援這種取值,可以為類增加一個方法''' return ('name','age','gender') def __getitem__(self,item): '''內建方法,當使用obj['name']的形式的時候,將呼叫這個方法,這裡返回的結果就是值''' return getattr(self,item) a = A() r = dict(a) print(r)
更多關於Python相關內容感興趣的讀者可檢視本站專題:《Python字典操作技巧彙總》、《Python列表(list)操作技巧總結》、《Python函式使用技巧總結》、《Python資料結構與演算法教程》、《Python字串操作技巧彙總》及《Python入門與進階經典教程》
希望本文所述對大家Python程式設計有所幫助。