Использование attr.asdict() фильтра с вызываемым
Я пытаюсь создать метод в моем классе, который будет возвращать только публичные свойства как dict. Я борюсь с синтаксисом. Вот что я безуспешно пытался:
@attr.s
class C:
x = attr.ib()
_y = attr.ib()
def _no_privates(a, _):
return not a.name.startswith("_")
def public_properties_to_dict(self):
return attr.asdict(self, filter=attr.filters.include(_no_privates))
1 ответ
В вашем примере, _no_privates
это не функция, а метод.
Решение, которое я считаю лучшим, было бы двигаться _no_privates
из класса в верхнюю сферу. Это функция, которая принимает аргумент и возвращает значение на основе этого аргумента и ничего больше.
Если вы настаиваете на создании _no_privates
метод, вы можете написать filter=attr.filters.include(self._no_privates)
,
Однако подпись _not_privates
неправильно в любом случае. Если это функция, она должна принимать только a
, Если это метод, первый аргумент self
, с последующим a
,