字典轉換為類的方法

2021-10-10 13:49:14 字數 2028 閱讀 8724

看到一段**,傳入的為字典,在內部直接轉換為類了,看起來有點使用價值。

import copy

class

instrument

: __repr__ = property_repr

def__init__

(self, dic)

: self.__dict__ = copy.copy(dic)

@property

deforder_book_id

(self)

:return self.__dict__[

"order_book_id"

] @property

defsymbol

(self)

:return self.__dict__[

"symbol"

]

測試**:

if __name__ ==

'__main__'

: a = instrument(

)print

(a.symbol)

print

(a)

注意的是__repr__ = property_repr是類的通用直觀列印**,其實現為:

def

iter_properties_of_class

(cls)

:for varname in

vars

(cls)

: value =

getattr

(cls, varname)

ifisinstance

(value,

property):

yield varname

defproperties

(inst)

: result =

for cls in inst.__class__.mro():

abandon_properties =

getattr

(cls,

'__abandon_properties__',[

])for varname in iter_properties_of_class(cls)

:if varname[0]

=="_"

:continue

if varname in abandon_properties:

continue

# fixme: 這裡getattr在iter_properties_of_class中掉用過了,效能比較差,可以優化

try:

tmp =

getattr

(inst, varname)

except

(attributeerror, runtimeerror, keyerror)

:continue

if varname ==

"positions"

: tmp =

list

(tmp.keys())

ifhasattr

(tmp,

'__******_object__'):

result[varname]

= tmp.__******_object__(

)else

: result[varname]

= tmp

return result

defproperty_repr

(inst)

:# return pformat(properties(inst))

return

"%s(%s)"

%(inst.__class__.__name__, properties(inst)

)

最終生成的結果為:

招商銀行

instrument(

)

除錯看到的結果:

python argparse轉換為字典

在使用argparse定義程式引數時,常規用法如下 import argparse parser argparse.argumentparser parser.add argument epochs type int default 5000 help train epochs.parser.add...

Pandas DataFrame轉換為字典的方法

該to dict 方法將列名設定為字典鍵將 id 列設定為索引然後轉置dataframe是實現此目的的一種方法。to dict 還接受乙個 orient 引數,您需要該引數才能輸出每列的值列表。否則,將為每列返回表單的字典。可以使用以下行完成這些步驟 df.set index id t.to dic...

類陣列轉換為陣列的方法

1 array.prototype.slice.call 這種方法是借用了陣列原型中的slice方法,返回乙個陣列。slice方法的內部實現 array.prototype.slice function start,end return result 乙個通用的轉換函式 var toarray fu...