【发布时间】:2016-01-07 20:24:28
【问题描述】:
我有一个类似字典的类,其方法返回其键、值和项的视图。执行此操作的方法非常简单:
class MyType(collections.MutableMapping):
def keys(self):
return collections.KeysView(self)
但是,为如此简单的事情创建方法似乎毫无意义;我所做的只是将self 传递给另一个可调用对象。我宁愿简单地将KeysView 的类构造函数视为绑定方法。执行以下操作会创建一个嵌套类(这很好,因为有时这正是您想要的),但它看起来更接近我想要做的:
class MyType(collections.MutableMapping):
keys = collections.KeysView
Python 或其标准库是否有任何内置功能可以做到这一点?也许是这样的:
class MyType(collections.MutableMapping):
keys = bind_constructor_as_method(collections.KeysView)
我觉得functools 中应该有一些可以完成这项工作的东西,但是乍一看没有任何东西可以作为正确的答案。可能是functools.partial,但这个名字并不能很好地描述我想要做什么。
我是否只需要手动滚动一个自定义描述符类来完成类似的工作?
注意:
对于工作,我经常需要使用 Python 2.7,因此尽管 Python 3.x 的答案仍然受到赞赏(并且有用),但它们可能不会完全缓解我个人的问题。但是,他们可能会帮助其他人解决这个问题,所以仍然请包括他们!
【问题讨论】:
标签: python class methods binding descriptor