【发布时间】:2020-01-07 10:01:47
【问题描述】:
我在一个类中有一个方法,该方法用带参数的装饰器进行装饰。像这样的:
class SomeClass():
@dec(arg1, arg2, arg3)
def some_func(farg1, farg2, farg3):
....
...
装饰器是这样的
def dec(*data):
def _api(func):
func.__arguments_sent__ = data
def internal_func(func, *args, **kwargs):
response = func(*args, **kwargs)
return response
return decorator.decorator(internal_fun, func)
return _api
我正在尝试修改“SomeClass”的某些已创建实例的 arg3(像这样在装饰器中发送 - @dec(arg1, arg2, arg3))。如何在不更改源代码并重新创建此实例的情况下实现此目的?
我有一个可以修改这个实例的后门进程。我正在寻找实现此修改的最简单方法。
【问题讨论】:
-
您能否提供一个示例来说明如何调用它以及会发生什么。
arg3会是SomeClass被更改的属性的名称吗?您如何确定将其更改为的值? -
@PatrickHaugh:我在传递给装饰器的参数和函数之间进行了一些映射。我的装饰器的定义很长,它检查关系是否成立。 arg3 是一些静态值,例如 '5' 等,与 SomeClass 的动态更改实例无关。简而言之,我的 arg3 在代码中是“5”,我想将其更改为“4”而不重新创建我的实例方法。谢谢。
-
装饰器参数在解析类时被评估,这比你创建实例要早得多,所以一旦你有了实例就忘了改变它们。您应该从类变量或实例变量中提供该参数,而不是作为装饰器的参数
标签: python overriding decorator