1. 程式人生 > 程式設計 >python物件轉字典的兩種實現方式示例

python物件轉字典的兩種實現方式示例

本文例項講述了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程式設計有所幫助。