为了理解Python中的装饰器,我在一个类中创建了一个示例。但是当我运行它时,我收到一个错误。
class Operation:
def __init__(self, groupe):
self.__groupe = groupe
@property
def groupe(self):
return self.__groupe
@groupe.setter
def groupe(self, value):
self.__groupe = value
def addition(self, func_goodbye):
ln_house = len('house')
ln_school = len('school')
add = ln_house + ln_school
print('The result is :' + str(add))
return func_goodbye
@addition
def goodbye(self):
print('Goodbye people !!')
if __name__ == '__main__':
p1 = Operation('Student')
p1.goodbye()
我收到此错误:
跟踪(最近一次通话结束): 文件“ Operation.py”,第1行,在 类操作: 操作中的文件“ Operation.py”,第21行 @加成 TypeError:additional()缺少1个必需的位置参数:'func_goodbye'
答案 0 :(得分:3)
您可以拥有一个类范围的装饰器,但是在调用装饰器时不会出现self
装饰器:
@foo
def bar(): ...
大致等同于
def bar(): ...
bar = foo(bar)
在您的特定示例中,如果删除了self
参数,则该参数应该会按预期运行:
def addition(func_goodbye):
ln_house = len('house')
ln_school = len('school')
add = ln_house + ln_school
print('The result is :' + str(add))
return func_goodbye
@addition
def goodbye(self):
print('Goodbye people !!')
出于良好的考虑,在此之后我可能会del addition
只是为了确保以后不会意外调用
(顺便说一句:一个不幸的副作用是许多短毛绒,类型检查器会认为这种“奇数”,所以我还没有找到一种安抚它们的方法(例如mypy
))>