1

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

前任:

@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
4

1 回答 1

3

在您的情况下,您不能使用 attrs 来做到这一点,参考哲学: attrs 运行时影响非常接近于零,因为所有工作都是在定义类时完成的。一旦你初始化了它, attrs 就完全不在了。

要查看 attrs real 的作用:

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就无法处理了,如果你真的想控制自己的设置行为,为什么不使用为类设计的描述符属性。

于 2018-05-24T17:27:58.133 回答