我有一段代码,我从字典中提取一个函数,然后添加一个对象属性。但是我在函数中访问它时遇到了一些问题,可能是由于命名空间。
aFunction = FunctionsDictionary[key]
aFunction.someObject = someObject
aFunction()
def aFunction():
someObject.doSomething()
提供NameError global name 'someObject' is not defined.
如果我在设置属性后执行dir(aFunction),我可以看到它,但是函数中的dir()不显示属性。
虽然我可以更改代码以使函数接受对象作为参数,但是如何引用'实例上设置的这些属性?功能?
这是另一个例子:
def myFunc():
print coolAttr
func = myFunc
func.coolAttr = "Cool Attribute"
func()
NameError: global name 'coolAttr' not defined
答案 0 :(得分:1)
似乎没有一种(好的)方法来获取Python中当前运行的函数的引用;见Is there a generic way for a function to reference itself?和Python code to get current function into a variable?。如果使用def
使用名称定义所有函数,则可以通过名称引用函数(例如,在示例中为aFunction
)以在函数体中获取其属性。
更大的问题是,这可能没有您想要的效果...函数在python中通过引用传递,因此如果aFunction
中出现dict
多次,那么就会出现问题。仍然只是函数对象的一个副本。因此,如果您在dict
的多个值上设置属性,所有这些都恰好指向同一个函数,那么您最终只会存储属性的最后一个值...很难知道没有更多细节,如果这是你需要的。
最好的答案可能是重写代码,以便将相关值作为参数传递。