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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。