在python的类中使用装饰器

时间:2020-04-09 22:24:44

标签: python python-3.x

为了理解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'

1 个答案:

答案 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))