<p>如果您使用的是Python3.4(或者愿意为Python2.6+安装<a href="https://pypi.python.org/pypi/singledispatch" rel="noreferrer">backport</a>),那么可以使用<a href="https://docs.python.org/3/library/functools.html#functools.singledispatch" rel="noreferrer">^{<cd1>}</a>来完成以下操作:</p>
<pre><code>from functools import singledispatch
class S_Block(object): pass
class S_Empty(object): pass
class S_Function(object): pass
class Test(object):
def __init__(self):
self.render = singledispatch(self.render)
self.render.register(S_Block, self._render_block)
self.render.register(S_Empty, self._render_empty)
self.render.register(S_Function, self._render_function)
def render(self, s):
raise TypeError("This type isn't supported: {}".format(type(s)))
def _render_block(self, s):
print("render block")
def _render_empty(self, s):
print("render empty")
def _render_function(self, s):
print("render function")
if __name__ == "__main__":
t = Test()
b = S_Block()
f = S_Function()
e = S_Empty()
t.render(b)
t.render(f)
t.render(e)
</code></pre>
<p>输出:</p>
<pre><code>render block
render function
render empty
</code></pre>
<p><sub>*基于<a href="https://gist.github.com/ambv/5682351" rel="noreferrer">this gist.</a>的代码</p>