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坐標已作為整數傳遞,那麽它也將被包括在內。
相關用法
- Python Wand function()用法及代碼示例
- Python Sorted()用法及代碼示例
- Python Numbers choice()用法及代碼示例
- Python Tkinter askopenfile()用法及代碼示例
- Python ord()用法及代碼示例
- Python sum()用法及代碼示例
- Python round()用法及代碼示例
- Python id()用法及代碼示例
- Python vars()用法及代碼示例
注:本文由純淨天空篩選整理自devanshigupta1304大神的英文原創作品 attr.asdict() function in Python。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。