0

我想知道是否可以获取调用函数的变量的名称,以及如何获取。例如 :

myVar = something
myVar2 = something
myVar.function()
myVar2.function()

并且代码应该返回

myVar calls function()
myVar2 calls function()

谢谢你。

4

4 回答 4

3

似乎something已经是自定义类的对象(如果这是内置类,您可以对其进行子类化)。只需添加一个实例属性name,在创建时分配并稍后使用:

In [1]: class MyClass:
   ...:     def __init__(self, name):
   ...:         self.name = name
   ...:     def function(self):
   ...:         print 'function called on', self.name
   ...: 

In [2]: myVar = MyClass('Joe')

In [3]: myVar2 = MyClass('Ben')

In [4]: myVar.function()
function called on Joe

In [5]: myVar2.function()
function called on Ben

PS我知道这不是你要问的,但我认为比实际尝试使用变量名要好。上面评论中提到的问题有一个很好的答案来解释原因。

于 2012-11-25T19:01:32.607 回答
1

您可以进行一些堆栈操作来实现这一点,但我当然不建议这样做。希望你永远不要在实际代码中使用它:

>>> class C:
        def function(self):
            text = inspect.stack()[1][4][0].strip().split('.')
            return '{0} calls {1}'.format(*text)

>>> myVar = C()
>>> myVar.function()
'myVar calls function()'
于 2012-11-25T19:15:46.897 回答
1

可能没有名字:

def another:
    return something 

another().function()

Lev 的答案有一个很好的属性,它不依赖于任何内部 python 实现细节。列夫的技术是我经常使用的技术。

于 2012-11-25T19:08:42.740 回答
0

你可以做:

def myfuncname():
    pass
myvar=myfuncname
print globals()['myvar'].__name__

它将打印分配给变量的函数的名称。

于 2012-11-25T19:03:46.367 回答