【发布时间】:2020-07-22 15:58:33
【问题描述】:
为了理解 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()
我收到此错误:
Traceback(最近一次通话最后一次): 文件“Operation.py”,第 1 行,在 类操作: 文件“Operation.py”,第 21 行,在操作中 @添加 类型错误:addition() 缺少 1 个必需的位置参数:'func_goodbye'
【问题讨论】:
-
addition(self, func_goodbye) 需要参数 func_goodbye,这个参数没有给出。
-
另外,你为什么要直接调用你的装饰器方法呢?你不应该打电话给
goodbye吗? -
旁注:以这种方式使用属性在 Python 中是一种不好的做法。属性用于在不破坏属性访问的情况下实现功能。作为微不足道的“getters”和“settters”,他们没有任何好处。同样,这里没有理由使用双下划线名称。双下划线名称用于继承的名称修改,not for hiding attributes。
-
顺便说一句,您的
groupe属性完全没有意义,并违背了property的全部目的。只需删除它们并使用普通的groupe属性即可。 -
在我看来,我们不能在课堂上拥有自己的装饰器!!!是真的吗?
标签: python python-3.x