Python Attrs Trigger Converter при установленном атрибуте - PullRequest
0 голосов
/ 24 мая 2018

При использовании 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 голосов
/ 24 мая 2018

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

...