小编典典

Python装饰器和继承

python

帮助一个人。似乎无法让装饰器处理继承。将其分解为我的临时工作空间中最简单的小示例。似乎仍然无法正常工作。

class bar(object):
    def __init__(self):
        self.val = 4
    def setVal(self,x):
        self.val = x
    def decor(self, func):
        def increment(self, x):
            return func( self, x ) + self.val
        return increment

class foo(bar):
    def __init__(self):
        bar.__init__(self)
    @decor
    def add(self, x):
        return x

糟糕,名称“ decor”未定义。

好吧,怎么样@bar.decor?TypeError:未绑定的方法“ decor”必须以bar实例作为第一个参数调用(取而代之的是功能实例)

好吧,怎么样@self.decor?未定义名称“ self”。

好吧,怎么样@foo.decor?未定义名称“ foo”。

AaaaAAaAaaaarrrrgggg …我在做什么错?


阅读 221

收藏
2021-01-20

共1个答案

小编典典

定义decor为静态方法并使用以下形式@bar.decor

class bar(object):
    def __init__(self):
        self.val = 4
    def setVal(self,x):
        self.val = x
    @staticmethod
    def decor(func):
        def increment(self, x):
            return func(self, x) + self.val
        return increment

class foo(bar):
    def __init__(self):
        bar.__init__(self)
    @bar.decor
    def add(self, x):
        return x
2021-01-20