【发布时间】:2016-09-08 15:07:19
【问题描述】:
假设我有以下函数,该函数具有一个属性,该属性将其标记为在回调子系统中进行特殊处理:
def my_func(msg):
print msg
my_func.my_marker = SPECIAL_CONSTANT
问题是,如果其他代码位使用functools.partial 或其他装饰器包装my_func,那么my_marker 将会丢失。
my_partial = partial(my_func, 'hello world')
print my_partial.my_marker
>>> AttributeError...
有没有办法在包装时保护函数的属性?有没有更好的方法来存储我当前存储在my_marker 中的元数据?似乎存储对原始函数的引用也遇到了同样的问题。
【问题讨论】:
-
my_marker没有丢失。它仍然在你放置它的地方,在原始函数上。 -
@kindall -- 谢谢,虽然这不是我的意思:) 问题是:我应该把函数元数据放在哪里,以便装饰器等在包装函数中维护属性?
-
您可能想要做的是猴子补丁
functools.partial和/或functools.wraps将这些属性(或者通常只是所有非下划线属性)复制到包装函数。