import attr @attr.s class Point(object): x = attr.ib(default=1) # 定义默认参数 y = attr.ib(kw_only=True) #关键字参数 p1 = Point(1, y=2) p2 = Point(y=2) print(p1 == p2) # True print(p1) # Point(x=1, y=2) print(attr.asdict(p1)) # 转为字典格式# {'x': 1, '...
如果你再想要其它方法,也只需要在@attr.s装饰器中进行简单配置。 这个过程的核心原理其实并不复杂:attrs通过一个装饰器,动态地生成你需要的代码。 你可以通过查看生成的代码,看到它是如何将你定义的属性转换成__init__、__repr__等方法的。 这些生成的代码与手写代码完全一致,不存在神秘的“魔法”,只是帮你省去...
importattr@attr.s(auto_attribs=True)classTask:name:strpriority:int=attr.ib(default=3)# 示例代码task1=Task(name="学习Python")task2=Task(name="完成编程作业",priority=1) 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 您可以参考我们团队的经验总结:attrs模块的自动生成方法确实提高了我们的开发效率,...
步骤1: 安装attrs库 在开始之前,确保你已经安装了attrs库。可以使用以下命令进行安装: pipinstallattrs 1. 步骤2: 导入必要的模块 接下来,要导入attrs和其他可能需要的模块。我们将使用attr.s来定义我们的类,以及attr.ib来定义属性。 importattr# 导入 attrs 库fromtypingimportAny,TypeVar,Callable# 用于类型注解 1...
使用attrs可以定义不可变对象,确保数据的不可变性: import attr @attr.s(frozen=True) class Point: x = attr.ib() y = attr.ib() # 创建类的实例 p = Point(x=1, y=2) # 尝试修改属性会抛出异常 try: p.x = 10 except attr.exceptions.FrozenInstanceError as e: ...
attrs 库也对不可变式编程支持良好。将第一行改成 @attr.s(auto_attribs=True, frozen=True) 意味着 Book 现在是不可变的:尝试修改一个属性将会引发一个异常。相反,比如,如果希望将发布日期向后一年,我们可以修改成 attr.evolve(old_book, published_year=old_book.published_year+1) 来得到一个新的实例。
from attr import attrs, attrib @attrs class SmartClass(object): a = attrib() b = attrib() 其实就相当于已经实现了这些方法: class RoughClass(object): def __init__(self, a, b): self.a = a self.b = b def __repr__(self): return "RoughClass(a={}, b={})".format(self.a, se...
首先我们用 attrs 里面的 fields 方法可以查看一下 from attr import attrs, attrib,fields print(fields(Person)) (Attribute(name='name', default='', validator=None, repr=True, cmp=True, hash=None, init=True, metadata=mappingproxy({}), type=<class 'str'>, converter=None, kw_only=False), ...
import attr@attr.sclass Point(object):x = attr.ib(default=1) # 定义默认参数y = attr.ib(kw_only=True) # 关键字参数p1 = Point(1, y=2)p2 = Point(y=2)print(p1 == p2)# Trueprint(p1)# Point(x=1, y=2)print(attr.asdict(p1)) # 转为字典格式# {'x': 1, 'y': 2}...
name=attr.ib() age=attr.ib() sex=attr.ib() test2= test_attrs("小明", 18,"male")print(test2) 打印出来是 test(name=小明,age=18,sex=male) test_attrs(name='小明', age=18, sex='male') 对比test类 用__repr__处理的打印,和test_attrs类,用的类装饰器@attr.s简洁了很多,处理效果完全一...