Python Attrs Trigger Converter при установленном атрибуте
При использовании 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 ответ
Решение
В вашем случае вы не можете сделать это, используя 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 больше не сможет с этим справиться, если вы действительно хотите контролировать свое собственное поведение set, почему бы не использовать дескриптор, который предназначен для класса атрибутов.