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