关于python:为特定函数实例分配属性

Assigning attributes to specific function instance

我有一段代码,从字典中提取一个函数,然后向它添加一个对象属性。但是,我在从函数内部访问它时遇到一些问题,可能是由于名称空间的原因。

1
2
3
4
5
6
aFunction = FunctionsDictionary[key]
aFunction.someObject = someObject
aFunction()

def aFunction():
    someObject.doSomething()

NameError global name 'someObject' is not defined.

如果我在设置属性后执行dir(afunction),我可以看到它,但是函数中的dir()不会显示该属性。

虽然我可以更改代码使函数接受对象作为参数,但是如何引用在函数的"instance"上设置的这些属性?

下面是另一个例子:

1
2
3
4
5
6
7
def myFunc():
    print coolAttr

func = myFunc
func.coolAttr ="Cool Attribute"
func()
NameError: global name 'coolAttr' not defined

似乎没有一种(好的)方法来获取对当前在python中运行的函数的引用;请参见,函数是否有一种引用自身的通用方法?用python代码把当前函数转换成一个变量?.如果您的所有函数都是使用def定义的,那么您只需通过函数的名称(例如,您的示例中的aFunction来引用该函数,就可以在函数体中获得其属性。

更大的问题是这可能没有你想要的效果…在python中,函数是通过引用传递的,因此如果aFunctiondict中多次出现,那么仍然只有一个函数对象的副本。因此,如果您在EDOCX1的多个值上设置该属性,所有这些值恰好指向同一个函数,那么您最终只能存储该属性的最后一个值…如果你需要更多的细节,很难知道。

最好的答案可能是重写代码,以便将相关值作为参数传递。