我想知道是否可以获取调用该函数的变量的名称,以及如何。 例如:
myVar = something
myVar2 = something
myVar.function()
myVar2.function()
并且代码应该返回
myVar calls function()
myVar2 calls function()
谢谢。
答案 0 :(得分: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
P.S。我知道这不是你要问的,但我认为这个比实际尝试使用变量名更好。上面评论中提到的问题非常好answer解释了原因。
答案 1 :(得分:1)
可能没有名字:
def another:
return something
another().function()
Lev的答案有一个很好的属性,它不依赖于任何内部python实现细节。 Lev的技术是我经常使用的技术。
答案 2 :(得分: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()'
答案 3 :(得分:0)
你可以这样做:
def myfuncname():
pass
myvar=myfuncname
print globals()['myvar'].__name__
,它将打印变量分配给的函数的名称。