我有一堆函数(在任何类之外),我在这些函数上设置了属性,比如 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/