设置属性时的Python Attrs触发器转换器

时间:2018-05-24 17:01:09

标签: python validation python-attrs

使用python-attrs时,在设置属性时触发转换器的好方法是什么。

EX:

@attr.s
class A(object):
   b = attr.ib(converter=str)

>>> A(b=1)
A(b='1')
>>> a = A(b=1)
>>> a.b
'1'
>>> a.b = 2
>>> a.b
2   # converter not used

1 个答案:

答案 0 :(得分:1)

在你的情况下,你不能使用attrs,reference of philosophy:attrs运行时影响非常接近零,因为所有的工作都是在定义类时完成的。一旦你初始化它,attrs就完全没有了。

要了解其真实的作用:

import attr
import inspect


@attr.s
class A(object):
    b = attr.ib(converter=str)


print(inspect.getsource(A.__init__))

输出

def __init__(self, b):
    self.b = __attr_converter_b(b)

所以你可以看到所有的魔法只在init函数中完成,所以在初始化实例后,attrs再也无法处理它,如果你真的想控制自己的set行为,为什么不使用描述符,这是为类属性设计。