GitHub 博客园 Nanakon

单分发器

import functools

class SnareDrum(object): pass
class Cymbal(object): pass
class Stick(object): pass
class Brushes(object): pass

@functools.singledispatch
def play(instrument, accessory):
    raise NotImplementedError("Cannot play these")

@play.register(SnareDrum)
def _(instrument, accessory):
    if isinstance(accessory, Stick):
        return "POC!"
    if isinstance(accessory, Brushes):
        return "SHHHH!"
    raise NotImplementedError("Cannot play these")

play(SnareDrum(), Stick()) # "POC!"
play(SnareDrum(), Brushes()) # "SHHHH!"

 

posted on 2017-03-27 08:48  jzm17173  阅读(59)  评论(0编辑  收藏  举报

导航

轻音