python - 调度一个类方法

标签 python

给定下面的一段代码,你如何正确地调度一个类方法:

>>> class A:
...     def a(self):
...         pass
...     def b(self):
...         pass
...     c = a
...     dispatch_map = { 'a' : a, 'b' : b }
...     def dispatch(self, arg):
...         self.dispatch_map[arg]()   # Fail: unbound method!
>>> A().c
<bound method A.a of <__main__.A object at 0x100550210>>
>>> A().dispatch_map['a']
<function a at 0x10054acf8>

为什么 c 是绑定(bind)方法,而 dispatch_map['a'] 是未绑定(bind)方法。 这对于普通函数来说很简单,并且是选择/大小写替换的常见习惯用法,使用类方法执行此操作的正确方法是什么?

最佳答案

只有当有一个实例要绑定(bind)时,您才能绑定(bind)一个方法。您的调度映射仅使用类构建映射。

__init__中构建 map :

def __init__(self):
    self.dispatch_map = { 'a' : self.a, 'b' : self.b }

或在您的 dispatch() 方法中显式绑定(bind)方法:

def dispatch(self, arg):
    bound = self.dispatch_map[arg].__get__(self, type(self))
    bound()

这使用了 descriptor protocol绑定(bind)方法,这是在实例上查找方法时通常发生的情况。

关于python - 调度一个类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19075843/

相关文章:

在类的所有方法中将参数转换为相同标准的 Pythonic 方式

python - 在python中将001格式的数字添加到文件名中

python - Django 中不寻常的 setdefault

python - 使用 Django 自定义用户模型 (Django 1.6)

python - $ python -bash :/usr/local/bin/python: No such file or directory

python - 你能导入一个 .so 文件吗?

python - 忽略元组比较中的值但仍检索它

python - 在 python 中监听已用于 UDP 数据包的端口?

python - 编写单独的 JSON 条目 Python 时遇到问题

python - 如何简化大量类似的 ifs