(я автор cattrs и основной участник attrs.)
Hello,
класс Python attrs по определению будет иметь все свои поля в экземпляре__dict__
.Когда вы говорите, что структурирование «должно возвращать объект только с атрибутами A и B», я предполагаю, что вы хотите, чтобы возвращаемый экземпляр выдавал AttributeError
при попытке доступа к obj.C
.
Насколько мне известно, этоневозможно с attrs, и при этом это не в духе attrs.Вы определили, что ваш класс имеет три атрибута, поэтому он должен иметь значения в этих атрибутах.
Что вы можете сделать, это использовать None
в качестве маркера значения для отсутствующего значения;это обычный способ представления отсутствующих значений в Python в целом.Фрагмент кода становится следующим:
from typing import Optional
import attr
from cattr import structure
@attr.s
class ABC:
A: float = attr.ib()
B: float = attr.ib()
C: Optional[float] = attr.ib(default=None)
d = {'A': 1, 'B': 2}
obj = structure(d, ABC)
Вы не хотели бы, чтобы код, ожидающий, что экземпляр ABC
будет иметь дело с таинственно отсутствующими атрибутами, верно?