Я хотел бы использовать декоратор, чтобы что-то сделать с производным классом (например, зарегистрировать класс или что-то еще). Вот мой код:Как управлять декоратором на производном классе python?
from functools import wraps
class Basic(object):
def __init__(self):
print "Basic::init"
def myDeco(name):
# define the decorator function that acts on the actual class definition
def __decorator(myclass):
# do something here with the information
print name, myclass
# do the wrapping of the class
@wraps(myclass)
def __wrapper(*args, **kwargs):
return myclass(*args, **kwargs)
# return the actual wrapper here
return __wrapper
# return the decorator to act on the class definition
return __decorator
@myDeco("test")
class Derived(Basic):
def __init__(self):
super(Derived, self).__init__()
print "Derived::init"
instance = Derived()
, который дает следующее сообщение об ошибке:
TypeError: must be type, not function
когда метод super
в Derived
называется. Я предполагаю, что переменная Derived
больше не является type
, но функция __decorator
фактически.
Как мне изменить декоратор (и ТОЛЬКО декоратор), чтобы исправить эту проблему?
декоратор внутри декоратор - он просит проблемы ... –
@JakubM .: Нет, функция фабрика декоратора. Это * обычная практика *. –
'@ wraps' внутри' myDeco'? выглядит странно для меня –