有没有一种方法可以将属性添加到函数中作为函数定义的一部分?

帕特里克·阿特纳

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'遗忘它?


从注释中编辑了许多其他方式:

user2357112支持Monica

不太里面,但装饰使得功能属性更加明显:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

有没有一种方法可以通过Java中的子类禁用一部分继承函数?

有没有一种方法可以将函数调用添加到自动属性?

有没有一种方法可以使用重载运算符作为比较的一部分

有没有一种方法可以检查何时将Emacs Lisp函数添加到Emacs?

WPF:有没有一种方法可以重写ControlTemplate的一部分而不重新定义整个样式?

有没有一种方法可以将仅列的一部分映射到变量?

有没有一种方法可以将属性仅添加到SQL中的1行?

有没有一种方法可以在React中每次更改状态时不让一部分画布重新加载?

有没有一种方法可以仅在Rails中重置数据库的一部分?

有没有一种真正的方法可以在TeeChart中隐藏系列的一部分?

有没有一种方法可以对列的一部分进行分组?

有没有一种方法可以将扩展添加到AnyObject?

有没有一种方法可以将IF添加到.htaccess?

有没有一种方法可以将打字稿定义添加到“窗口”对象

有没有一种方法可以将onClick事件添加到自定义组件

有没有一种方法可以根据字符串是否作为较长字符串的一部分进行过滤?

有没有一种方法可以仅对我的HTML代码的一部分禁用javascript?

有没有一种方法可以让VS Code以不同的语法“解释”文件的一部分?

有没有一种方法可以用热键剪切屏幕的一部分?

有没有一种方法可以让JavaScript记住随机选择数组的哪一部分?

有没有一种方法可以将数学函数作为Python 3中函数的参数?

有没有一种方法可以将历史记录添加到文件中?

有没有一种方法可以将标头添加到mysql查询结果中?

有没有一种方法可以将空元素添加到OCaml中的列表?

有没有一种方法可以将空元素添加到Javascript数组中?

有没有一种方法可以将gif添加到Markdown文件中?

有没有一种方法可以将python依赖项添加到柯南包中

有没有一种方法可以将变量添加到数组中,例如某种清单?

有没有一种方法可以将随机值添加到此类中?