将 attr.asdict() 过滤器与可调用对象一起使用



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

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

在你的例子中,_no_privates不是函数,而是一个方法。

我认为更好的解决方案是将_no_privates从类中移出到顶级范围内。它是一个函数,它接受一个参数并基于该参数返回一个值,而不是其他任何内容。

如果你坚持让_no_privates成为一种方法,你可以写filter=attr.filters.include(self._no_privates)

但是,无论如何,_not_privates的签名都是错误的。如果是函数,则只需a.如果是方法,则第一个参数为self,后跟a

最新更新