python:decorator to``unuinit`如何工作?

2024-09-28 17:27:58 发布

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

给定函数

@mydecorator
def f(x):
    ...
f(5)

我可以移除decorator并将函数调用为

^{pr2}$

如何将其转换为对象方法?尤其是__init__??在

例如,我创建了一个装饰师

class TestClass:
    @mydecorator
    def __init__(self, x, y):
        ...

它修改传递给__init__的参数。我想删除它,并只在我想要的实例上手动应用它

  • 这样做的合适语法是什么?(例如,myinstance = mydecorator(TestClass)(...)
  • __init__之前调用__new__会影响行为吗?在

Tags: 对象实例方法函数self参数initdef
1条回答
网友
1楼 · 发布于 2024-09-28 17:27:58

decorator并没有真正修改参数。它只是一个高阶函数,返回给定函数的函数。你可以这样做

def make_cooler_init(init):
    def new_function(*args):
        init(*args)
        print(args)
    return new_function

使用

^{pr2}$

这只会在调用init之后更改函数以打印参数,不会有太大变化。要只修改某些实例的行为,可以在decorator中处理它,因为可以访问参数和默认函数。在

def make_cooler_init(init):
    def new_function(*args):
        if args[1] == 'True':
            init(*args)
        else:
            print(args)
    return new_function   

相关问题 更多 >