0

我正在尝试在我的类上创建一个方法,该方法将只返回公共属性作为字典。我在语法上苦苦挣扎。这是我尝试失败的方法:

@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))
4

1 回答 1

1

在您的示例中,_no_privates不是功能,而是一种方法。

我认为更好的解决方案是_no_privates离开班级进入顶级范围。它是一个函数,它接受一个参数并基于该参数返回一个值,仅此而已。

如果你坚持做_no_privates一个方法,你可以写filter=attr.filters.include(self._no_privates).

_not_privates但是,无论如何签名都是错误的。如果它是一个函数,它应该需要a. 如果是方法,则第一个参数是self,然后是a

于 2018-07-09T12:53:19.593 回答