Python Attrs的文档,Automatic Field Transformation and Modification部分规定
...您可以添加转换器、更改类型甚至删除属性 完全或create new ones!"(强调部分添加).
它还在有关Attribute的API文档中指出"您永远不应该自己实例化这个类."
然而,如果您试图在field_transformer
函数中添加字段,则无法,至少对于attrs.field()
函数是这样.
import attrs
def transformer(cls, fields):
fields.append(attrs.field(name='bar'))
return fields
@attrs.define(field_transformer=transformer)
class A:
pass
A(bar=1)
这在TypeError: field() got an unexpected keyword argument 'name'
分时失败.如果您使用"别名",则会得到AttributeError: '_CountingAttr' object has no attribute 'name'
.
在field_transformer
函数中添加字段的正确方法是什么?
Edit: 我能够使用以下内容:
import attrs
def transformer(cls, fields):
ca = attrs.field()
f = attrs.Attribute.from_counting_attr(name="foo", ca=ca, type=int)
return [f, *fields]
@attrs.define(field_transformer=transformer)
class A:
pass
A(foo=1)