【问题标题】:Using attr.asdict() filter with a callable使用带有可调用对象的 attr.asdict() 过滤器
【发布时间】:2018-07-07 13:33:53
【问题描述】:

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

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

【问题讨论】:

    标签: python-attrs


    【解决方案1】:

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

    我认为更好的解决方案是将_no_privates 移出类进入顶级范围。它是一个函数,它接受一个参数并根据该参数返回一个值,仅此而已。

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

    但是_not_privates 的签名无论如何都是错误的。如果它是一个函数,它应该采用a。如果是方法,第一个参数是self,后面是a

    【讨论】:

      猜你喜欢
      • 2018-12-14
      • 2018-02-07
      • 2013-11-20
      • 1970-01-01
      • 2016-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-22
      相关资源
      最近更新 更多