【发布时间】:2019-08-02 23:10:39
【问题描述】:
我必须装饰一个继承的方法,但它装饰了所有继承的方法。基本上我必须创建一个装饰器来装饰类中的一个方法。
测试看起来像这样
@my_decorator
class TestClass(Subclass):
pass
t = TestClass()
t.say_hi
假设我的子类看起来像这样
class SubClass():
def __init__(self):
pass
def say_hi():
print("Hi")
def say_wow():
print("wow")
现在我必须创建my_decorator,它必须在打印“Hi”之前将继承的函数say_hi() 装饰为print("*****")
我尝试这样做,但装饰器适用于来自SubClass的所有方法
def my_decorator(cls)
def say_hi():
print("*********")
cls.say_hi()
return say_hi()
自然它适用于子类的每个函数,但我如何让它只适用于say_hi() 函数? - 它还返回一个TypeError "NoneType" object is not callable
【问题讨论】:
-
装饰一个类和装饰一个in类的方法有很大的不同。您展示的装饰器,除了错误之外,在调用它的
say_hi方法之后,看起来它用None替换了SubClass。 -
那就是我不知道该怎么做。我只想装饰TestClass的一种方法
-
你......装饰方法,而不是类。
-
对不起,对python很新,我仍然不能只装饰方法,因为这些是测试数据,我不能改变它们
标签: python decorator python-decorators