Python 带参数的继承类方法修饰符

Python 带参数的继承类方法修饰符,python,python-decorators,Python,Python Decorators,我有一个基类,我想在其中定义一个装饰器。应该在继承类时使用该装饰器 class Upper(object): def model_definition(self, name): def func(create_function): if self.loading: model = self.load(name) else: model = create_func

我有一个基类,我想在其中定义一个装饰器。应该在继承类时使用该装饰器

class Upper(object):
    def model_definition(self, name):
        def func(create_function):
            if self.loading:
                model = self.load(name)
            else:
                model = create_function()

            self.models[name] = model
            return model
        return func

class Lower(Upper):
    @Upper.model_definition(name='example_model'):
    def define_model(self):
        [...]
        return model

这样做时,我得到的消息是
model\u definition()缺少一个必需的位置参数:“self”
。正确的方法是什么?

model\u definition
方法需要一个实例,这就是参数
self
所代表的。 现在,为了在实例上使用decorator,只需将实例作为参数传递即可。下面是一个装饰器为静态的示例:

class Upper(object):
    def __init__(self):
        self.model = None

    @staticmethod
    def model_definition(name=''):
        def func(f):
            def wrapper(*args):
                self = args[0]
                print('I am defining the model')
                if not self.model:
                    self.model = name
                return f(*args)

            return wrapper

        return func

class Lower(Upper):
    def __init__(self):
        Upper.__init__(self)
        self.define_model()

    @Upper.model_definition(name='example_model')
    def define_model(self):
        print('The model is : ', self.model)
主要内容:

l = Lower()
我正在定义模型

(“模型为:”,“示例_模型”)


同样相关的还有:如果您只是使用静态方法作为装饰器,那么为什么要将其放在类中呢?可读性和逻辑性。我想这就是为什么你还有@staticmethoddecorator。然而,装饰器确实可以在类之外定义。