向带有d的类添加方法

2024-09-28 17:25:14 发布

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

如何使用Python中的decorator向类添加方法?我的目标是让使用我的decorator的类有一个可用的方法。在

下面是一个简化的例子。我希望instance.dec_added_func()返回{}:

>>> def myFunction():
...   return 'X'
... 
>>> myFunction()
'X'
>>> def myDecorator(cls):
...   cls.dec_added_func = myFunction
... 
>>> @myDecorator
... class MyClass(object):
...   a = 'A'
... 
>>> instance = MyClass()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'NoneType' object is not callable

我知道这可以通过一个基类的子类化来实现,但是我希望能够用一个修饰符来实现。在


Tags: 方法instance目标addedreturnobjectdefmyclass
2条回答

你需要做两件事:

  1. myDecorator返回传递给它的类对象:

    def myDecorator(cls):
        cls.dec_added_func = myFunction
        return cls
    

    否则,在默认情况下,decorator将返回None,并且当您尝试调用MyClass()时,您将得到一个TypeError

  2. 使myFunction接受self参数:

    ^{pr2}$

    无论何时在类的实例上调用它,它都将被隐式传递。

下面是一个演示:

>>> def myFunction(self):
...     return 'X'
...
>>> def myDecorator(cls):
...     cls.dec_added_func = myFunction
...     return cls
...
>>> @myDecorator
... class MyClass(object):
...     a = 'A'
...
>>> instance = MyClass()
>>> instance.dec_added_func()
'X'
>>>

对于简短的方法,如果您认为lambda更具可读性,也可以考虑使用lambda:

def myDecorator(cls):
    cls.dec_added_func = lambda self: 'X'
    return cls

==运算符添加到具有value字段的类的另一个示例:

^{pr2}$

相关问题 更多 >