我真的很喜欢通过
attrs
库定义类的方式。
特别是如何劫持 Python 类变量的常用语法来定义实例变量。
但是有没有办法用attrs
获取类变量呢?
如果我有以下代码
from typing import ClassVar, Final
from attrs import define
@define
class Person:
name: Final[str]
age: Final[int]
goes_to_school: Final[bool]
my_class_var: ClassVar[str]
p = Person('Bart Simpson', 10, True)
p.my_class_var
失败并显示
AttributeError: 'Person' object has no attribute 'my_class_var'
。
事实上,attrs API 参考说
注释为typing.ClassVar的属性,以及既没有注释也没有设置为field()的属性将被忽略。
您可以通过使用 mixin 类和此类变量来安装类变量,简单的例子
from attrs import define, field
class Mixin:
my_var = 25
@define
class Person(Mixin):
name = field()
p = Person('Jane')
print(p.my_var)
提供输出
25
(使用 attrs 23.1.0 和 Python 3.10.12 进行测试)