Python 将属性分配给特定函数实例

Python 将属性分配给特定函数实例,python,function,namespaces,Python,Function,Namespaces,我有一段代码,从字典中提取一个函数,然后向它添加一个对象属性。但是,我在从函数中访问它时遇到了一些问题,可能是由于名称空间 aFunction = FunctionsDictionary[key] aFunction.someObject = someObject aFunction() def aFunction(): someObject.doSomething() 给出name错误未定义全局名称“someObject”。 如果在设置属性后执行dir(函数),我可以看到它,但是函

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

aFunction = FunctionsDictionary[key]
aFunction.someObject = someObject
aFunction()

def aFunction():
    someObject.doSomething()
给出
name错误未定义全局名称“someObject”。

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

虽然我可能会更改代码,使函数接受对象作为参数,但如何引用函数“实例”上设置的这些属性

下面是另一个例子:

def myFunc():
    print coolAttr

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

似乎没有(好的)方法来获取Python中当前正在运行的函数的引用;见和。如果您的所有函数都是使用
def
定义的名称定义的,您可以通过名称引用函数(例如示例中的
affunction
),以获取函数体中的属性

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


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

通常,您似乎无法在运行时向函数引用添加属性(即,在应用于函数定义的装饰器之外)。如果在将属性指定给函数实例后打印该函数实例,然后从函数中打印self,则它们不是同一个对象(不同的内存地址)。我觉得这很令人困惑。我从字典中创建函数的一个实例,对其进行修改,但当它运行时,它不是同一个对象。在随机函数体中,
self
并不指当前正在执行的函数
self
仅在作为类方法的第一个参数显式给出时定义;这不是一个关键词。请参见例如和。抱歉,在我的评论中,我编写了一个绑定函数的装饰程序:
def bind(func):return func.\uu get\uuu(func,type(func))