當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python attr.asdict()用法及代碼示例


Python有一個稱為attrs的庫,該庫使以麵向對象的方式編寫的代碼更加簡單明了。在具有數據的類中,最好將其轉換為字典。我們可以在Python中使用attr.asdict()函數將i的attrs屬性值作為dict返回。

用法:attr.asdict (inst, recurse:bool=True, filter:__class__=None, dict_factory:, retain_collection_types:bool=False)

參數:
inst:attrs-decorated類的實例
recurse:(boolean)遞歸到也是attrs-decorated的類中
dict_factory:可調用以從中產生字典
filter:一個可調用對象,用於確定是包含屬性(真)還是刪除屬性(假)
retain_collection_types:僅當遞歸為True時才有意義。

範例1:讓我們以一個非常簡單的類坐標示例為例,該示例接受坐標作為屬性。

Python3



# import library 
import attr 
  
  
# initialising class Coordinates, no need to 
# initialize __init__ method 
@attr.s 
class Coordinates(object):
    
    # attributes 
    x = attr.ib() 
    y = attr.ib() 
  
  
c1 = Coordinates(1, 2) 
  
# converting data into dict using attr.asdict()  
# function 
print(attr.asdict(Coordinates(x=1, y=2)))

輸出:

{'x':1, 'y':2}

在這裏,傳遞的數據將轉換為字典形式。

範例2:這是User Info類的另一個示例,該類將接受用戶的名稱和電子郵件ID作為屬性,但不包括dict數據形式的user的電子郵件ID。

Python3

import attr 
  
  
@attr.s 
class UserInfo(object):
    users = attr.ib() 
  
  
@attr.s 
class User(object):
    email = attr.ib() 
    name = attr.ib() 
  
  
# including only name and not email 
attr.asdict(UserInfo([User("lee@har.invalid", "Lee"), 
                      User("rachel@har.invalid", "Rachel")]), 
            filter=lambda attr, value:attr.name != "email")

輸出:

{'users':[{'name':'Lee'}, {'name':'Rachel'}]}

在這裏,我們將獲得一個嵌套詞典,其中排除了用戶的電子郵件。

範例3:通過使用attr.asdict()函數的參數過濾器,我們可以嘗試使用其他方法來包含或排除屬性。

Python3

import attr 
  
  
@attr.s 
class UserInfo(object):
    name = attr.ib() 
    password = attr.ib() 
    age = attr.ib() 
  
  
# excluding attributes 
print(attr.asdict(UserInfo("Marco", "abc@123", 22), 
                  filter=attr.filters.exclude( 
                      attr.fields(UserInfo).password, int))) 
  
  
@attr.s 
class Coordinates(object):
    x = attr.ib() 
    y = attr.ib() 
    z = attr.ib() 
  
  
# inclusing attributes 
print(attr.asdict(Coordinates(20, "5", 3), 
                  filter=attr.filters.include(int)))

輸出:

{'name':'Marco'}
{'x':20, 'z':3}

在這裏,在UserInfo類中,我們傳遞了三個參數name,password和age,其中age是一個整數值,其餘值是string。在filter參數中,我們排除了屬性-密碼和整數值(此處為-age),因此密碼和年齡將從字典中排除。

在“坐標”類中,我們傳遞了三個參數-x,y和z坐標。此處,y坐標作為字符串傳遞。在filter參數中,我們包括了整數值。因此,x和z坐標包含在最終字典中。如果y坐標已作為整數傳遞,那麽它也將被包括在內。




相關用法


注:本文由純淨天空篩選整理自devanshigupta1304大神的英文原創作品 attr.asdict() function in Python。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。