欢迎访问宙启技术站
智能推送

`@attr.s()`:Python中的属性初始化简化。

发布时间:2023-12-27 05:47:09

@attr.s()是Python中一个简化属性初始化的装饰器。使用这个装饰器可以更方便地定义和初始化类的属性,减少了编写重复代码的工作量。在使用@attr.s()装饰的类中,可以使用简单的语法来定义和初始化属性。

下面是一个使用@attr.s()装饰器的例子:

import attr

@attr.s
class Person:
    name = attr.ib()
    age = attr.ib(default=0)

    def say_hello(self):
        print(f"Hello, my name is {self.name}. I am {self.age} years old.")

p1 = Person("Alice", 25)
p1.say_hello()  # 输出:Hello, my name is Alice. I am 25 years old.

p2 = Person("Bob")
p2.say_hello()  # 输出:Hello, my name is Bob. I am 0 years old.

在上面的例子中,Person类使用@attr.s装饰器进行修饰。在类的定义中,name属性通过attr.ib()进行了定义,age属性还使用了default=0参数来设置默认值。这样,我们就可以使用类的构造函数来快速初始化对象的属性。

当我们创建p1对象时,我们为name属性传入了参数"Alice",为age属性传入了参数25。而在创建p2对象时,我们只为name属性传入了参数"Bob",age属性没有传入参数,所以使用了默认值0。

使用@attr.s()装饰器的另一个好处是,它自动为我们生成了__eq____repr__等方法。这样,我们可以方便地进行对象的比较和打印。

print(p1 == p2)  # 输出:False
print(p1)  # 输出:Person(name='Alice', age=25)
print(p2)  # 输出:Person(name='Bob', age=0)

总之,@attr.s()装饰器提供了一种简化属性初始化的方式,让我们可以更加方便地定义和初始化类的属性。它减少了编写重复代码的工作量,并且还自动生成了一些常用的方法,方便我们进行比较和打印对象。