Использование 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,

Другие вопросы по тегам