Python装饰器和继承器

2024-04-19 21:50:33 发布

您现在位置:Python中文网/ 问答频道 /正文

帮个忙。似乎找不到装修工来处理继承问题。把它分解为我的scratch工作区中最简单的一个小例子。似乎还是不能让它工作。

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:必须以bar实例作为第一个参数调用未绑定方法“decor”(改为get function instance)

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

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

aaaaaaaaaaarrrrggg。。。我做错什么了?


Tags: self名称returnfooinitdefbarval
1条回答
网友
1楼 · 发布于 2024-04-19 21:50:33

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

相关问题 更多 >