from functools import partial

class DispatchError(Exception):
	pass

class Dispatcher:
	def __init__(self, prefix='on_'):
		self._prefix = prefix
	
	def on_default(self, method, *args, **kw):
		raise DispatchError('"{}" undefined.'.format(method))
	
	def __call__(self, method, *args, **kw):
		return getattr(
			self,
			self._prefix + method,
			partial(self.on_default, method)
		)(*args, **kw)

class ActorDispatcher(Dispatcher):
	def on_move(self, *args, **kw):
		print('moving...')
	def on_attack(self, *args, **kw):
		print('attacking..')
	# etc...

print( list( map(
	ActorDispatcher(), ['move', 'attack'] * 2
)))