编辑: 作为练习,我需要在一个函数的结果前面添加一个字符串,该函数将在第二个时刻定义。我虽然使用装饰师但我显然是错的;关于如何做的任何建议?
OLD:
def my_decorator(func):
def wrapped(*args, **kwargs):
return "hello {0}".format(func(*args, **kwargs))
return wrapped
@my_decorator
def myfunc():
return "boy"
def myfunc():
return "girl"
if __name__ == "__main__":
print(myfunc())
此代码将打印“女孩”,我想打印“你好女孩”。 有没有办法做到这一点?
答案 0 :(得分:1)
装饰器用包装版本替换该函数。如果你再次更换它,装饰版本就会消失。
真的你不应该这样做。但请记住,装饰器只是一个包装器;如果您要动态替换函数,那么首先不要修饰它们,只需在调用它时应用包装器:
print(my_decorator(myfunc)())
答案 1 :(得分:1)
如果您明确将其应用于重新定义的函数,那么您的装饰器就可以工作,正如其他人提到的那样:
if..else
如果您不能静态地执行此操作,您仍然可以使用装饰器代码来执行此操作:
@my_decorator
def myfunc():
return "boy"
@my_decorator
def myfunc():
return "girl"
if __name__ == "__main__":
print(myfunc())