给定功能
@mydecorator
def f(x):
...
f(5)
我可以删除装饰器并将该函数调用为
mydecorator(f)(5)
这如何转化为对象方法?特别是__init__
??
例如,我创建了一个装饰器
class TestClass:
@mydecorator
def __init__(self, x, y):
...
修改传递给__init__
的参数。我想删除它,并仅在我想要的实例上手动应用
myinstance = mydecorator(TestClass)(...)
)__new__
之前调用__init__
会影响行为吗?答案 0 :(得分:1)
装饰器并没有真正修改参数。它只是一个高阶函数,它返回给定函数的函数。你可以这样做
def make_cooler_init(init):
def new_function(*args):
init(*args)
print(args)
return new_function
使用
class TestClass:
@make_cooler_init
def __init__(self, x, y):
self.x = x
self.y = y
这只会在调用init后更改函数来打印参数,它不会有太大变化。要仅修改某些实例的行为,您可以在装饰器中处理它,因为您可以访问参数和默认函数。
def make_cooler_init(init):
def new_function(*args):
if args[1] == 'True':
init(*args)
else:
print(args)
return new_function