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

2022-09-28 20:42:25 字數 1315 閱讀 8741

一. 方便但不完美的__dict__

物件轉字典用到的方法為__dict__. 比如物件物件a的屬性a.name='wk', a.age=18, 那麼如果直接將使用a.__dict__獲得對應的字典的值為: , 很方便, 但是也存在一些限制. 其不完美之處在於:

比如:class a(object):

name = 'wukt'

age = 18

def __init__(self):

self.gender = 'male'

a = a()

print(a.__dict__)

此時的列印結果是:

但是類變數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['n']的形式取,

但是物件是不可以以這種方式取值的, 為了支援這種取值, 可以為類程式設計客棧增加乙個方法'''

return ('name', 'age', 'gender')

def __getitem__(self, item):

'''內建方法, 當使用obj['name']的形式的時候, 將調程式設計客棧用這個方法, 這裡返回的結果就是值'''

return getattr(self, itwww.cppcns.comem)

a = a()

r = dict(a)

print(r)

python 屬性property的兩種實現

class money object def init self self.money 0def get money self return self.money defset money self,value if isinstance value,int self.money value els...

python中package機制的兩種實現方式

10.5pt font family 宋體 mso ascii font family verdana mso fareast font family 宋體 mso fareast theme font minor fareast mso hansi font family verdana 當執行 ...

python中package機制的兩種實現方式

洞庭散人python中package機制的兩種實現方式 當執行import module時,直譯器會根據下面的搜尋路徑,搜尋module1.py檔案。1 當前工作目錄 2 pythonpath中的目錄 3 python安裝目錄 usr local lib python 事實上,模組搜尋是在儲存在sy...