python - "self"里面的普通函数?

标签 python

我有一堆函数(在任何类之外),我在这些函数上设置了属性,比如 funcname.fields = 'xxx'。我希望我可以使用 self.fields 从函数内部访问这些变量,但当然它告诉我:

global name 'self' is not defined

那么……我能做什么?我可以访问一些神奇的变量吗?喜欢 __this__.fields 吗?


一些人问“为什么?”。您可能不同意我的推理,但我有一组函数,它们都必须共享相同的签名(只接受一个参数)。在大多数情况下,这个参数足以进行所需的计算。然而,在少数有限的情况下,需要一些额外的信息。与其强制每个函数接受一长串大部分未使用的变量,我决定只将它们设置在函数上,以便可以轻松忽略它们。

不过,我现在想到,如果您不关心额外的参数,您可以只使用 **kwargs 作为最后一个参数。好吧……

编辑: 实际上,有些函数不是我写的,宁愿不修改以接受额外的参数。通过将附加参数作为属性“传入”,我的代码既可以与利用额外参数的自定义函数一起使用,也可以与不需要额外参数的第三方代码一起使用。

感谢您的快速回答:)

最佳答案

self 不是 python 中的关键字,它只是一个普通的变量名。创建实例方法时,您可以随意命名第一个参数,self 只是一种约定。

与设置输入属性相比,您几乎总是更喜欢将参数传递给函数,但如果必须这样做,您可以使用实际的函数名称来访问其中的变量:

def a:
    if a.foo:
        #blah

a.foo = false
a()

参见 python function attributes - uses and abuses因为当它派上用场时。 :D

关于python - "self"里面的普通函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3207572/

相关文章:

python - 使用要在模板中使用的中间件在 Flask 请求中设置变量

python - 按列变量拆分 Pandas 数据框

python - Pandas 在包含列表的列上应用条件

python - 在 Django Rest 框架序列化程序中包含嵌套元素

python - 如何在 Pandas 数据框中将两列合并为一列

python - 当我尝试创建不连续轴时,为什么我的条形图会变成折线图?

python - 对象在 python3 中没有属性 '.__dict__'

python - Django 模型 "doesn' t 声明一个显式的 app_label”

python - 即使元素存在于 Python 列表中,值也会出错

用于谷歌游戏商店抓取的 Python API