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。然而,装饰器确实可以在类之外定义。