do_something.n
每次调用函数时,函数属性都会增加。
我在函数do_something.n=0
外部声明了属性,这使我感到困扰。
我回答了使用queue.PriorityQueue的问题,而不关心使用“功能属性”来提供用于PriorityQueue的唯一计数器的比较-MartijnPieters提供了更好的解决方案)
MCVE:
def do_something():
do_something.n += 1
return do_something.n
# need to declare do_something.n before usign it, else
# AttributeError: 'function' object has no attribute 'n'
# on first call of do_something() occures
do_something.n = 0
for _ in range(10):
print(do_something()) # prints 1 to 10
还有什么其他方法可以定义函数“内部”的属性,从而避免AttributeError: 'function' object has no attribute 'n'
遗忘它?
从注释中编辑了许多其他方式:
不太里面,但装饰使得功能属性更加明显:
def func_attr(**attrs):
def wrap(f):
f.__dict__.update(attrs)
return f
return wrap
@func_attr(n=0)
def do_something():
do_something.n += 1
return do_something.n
这可能比将属性初始化放在函数内的任何方法都更干净。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句