将属性分配给特定的功能实例

时间:2014-10-01 02:57:58

标签: python function namespaces

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

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

1 个答案:

答案 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的多个值上设置属性,所有这些都恰好指向同一个函数,那么您最终只会存储属性的最后一个值...很难知道没有更多细节,如果这是你需要的。

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