Фактически, дескриптор dict должен быть своего рода атрибутом класса, так как он заполняется во время определения класса, и все экземпляры совместно используют одно и то же отображение обработчика маршрута.Однако класс еще не существует, когда декоратор вызывается и оценивается.Вы могли бы сделать что-то вроде следующего:
from functools import partial
class A:
router = {}
def handle(self, data):
m = self.router.get(data)
return m(self)
@partial(router.setdefault, 'open')
def open_handle(self):
return 5
>>> a = A()
>>> a.handle('open')
5
Или быть более явным и извлечь функцию маршрутизацииailail в повторно используемый класс:
from functools import partial
class Router(dict):
__call__ = lambda self, route: partial(self.setdefault, route)
class A:
router = Router()
def handle(self, data):
m = self.router.get(data)
return m(self)
@router('open')
def open_handle(self):
return 5