一个方法可以是同一类的另一个方法的修饰符吗?

2024-04-24 10:28:42 发布

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

我有一个类在函数上有一个单调的重复模式,我想把这个模式变成一个装饰器。但问题是这个decorator必须访问当前实例的一些属性,所以我想把它转换成这个类中的一个方法。我有点不对劲。在

所以,这和我想要的相似:

class DullRepetitiveClass:
    def __init__(self, nicevariable):
        self.nicevariable = nicevariable

    def mydecorator(self, myfunction):
        def call(*args, **kwargs):
            print "Hi! The value of nicevariable is %s"%(self.nicevariable,)
            return myfunction(*args, **kwargs)
        return call

    @mydecorator            #Here, comment (1) below.
    def somemethod(self, x):
        return x + 1

(1)问题出在这里。我想使用DullRepetitiveClass.mydecorator方法来修饰somemethod方法。但是我不知道如何使用当前实例中的方法作为装饰器。在

有简单的方法吗?在

编辑:好吧,答案很明显。正如Sven在下面所说,decorator本身只是对方法进行转换。方法本身应该处理与实例相关的所有事情:

^{pr2}$

Tags: 实例方法selfreturndef模式args装饰
1条回答
网友
1楼 · 发布于 2024-04-24 10:28:42

decorator只得到一个参数——它所修饰的函数或方法。它不会以self参数的形式传递实例–在调用decorator时,甚至没有创建类,更不用说类的实例了。实例将作为第一个参数传递给修饰函数,因此您应该将self作为call()的参数列表中的第一个参数。在

我认为没有必要将decorator包含在类范围中。您可以这样做,但也可以在模块范围内使用它。在

相关问题 更多 >