来自两个装饰器的输出

2024-09-29 05:30:26 发布

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

请帮助我理解如何从两个装饰器接收输出。 这是我的密码:

def check1(function1):

  def getver1():
    ver1 = 0.1
    return getattr(function1(ver1))

  return getver1()


def check2(function2):

  def getver2():
    ver2 = 0.2
    return getattr(function2(ver2))

  return getver2()

@check1
@check1
class ClassObj(object):

  def __init__(self, *args, **kwargs):
    print(args)
    print(kwargs)

从这里,我只收到第二个的输出,但为什么呢

('0.2')


Tags: 密码returndefargs装饰kwargsprintgetattr
2条回答

我想你需要修改你的代码。有相当多的bug,您使用了check1两次而没有使用check2。在当前代码中不可能看到('0.2')的输出

而且,您使用类装饰器的方式是错误的。一个很好的参考是本文:https://krzysztofzuraw.com/blog/2016/python-class-decorators.html

装饰器从上到下堆叠。代码类似

@check1
@check2
class ClassObj(object):
    ...

相当于

class ClassObj(object):
    ...

ClassObj = check1(check2(ClassObj))

也就是说,用check1装饰ClassObj,然后用check2装饰结果

但是,您遇到的问题是,两个装饰器实际上都不返回类。它们都使用给定类的实例调用getattr(不正确)

相关问题 更多 >