我想知道是否可以獲取調用該函數的變量的名稱,以及如何獲取變量的名稱。 例如:獲取變量的名稱
myVar = something
myVar2 = something
myVar.function()
myVar2.function()
和代碼應返回
myVar calls function()
myVar2 calls function()
謝謝。
我想知道是否可以獲取調用該函數的變量的名稱,以及如何獲取變量的名稱。 例如:獲取變量的名稱
myVar = something
myVar2 = something
myVar.function()
myVar2.function()
和代碼應返回
myVar calls function()
myVar2 calls function()
謝謝。
你可以做一些堆棧操作來達到這個目的,但我當然不建議這樣做。希望你永遠不會在實際代碼中使用它:
>>> 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()'
看起來好像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
附:我知道這不完全是你問的,但我認爲這比實際嘗試使用變量名稱更好。上面評論中提到的問題有一個很好的解釋原因的answer。
你可以這樣做:
def myfuncname():
pass
myvar=myfuncname
print globals()['myvar'].__name__
,它會打印變量分配給函數的名稱。
什麼?!? 'globals()['myvar']'是,禁止局部變量(這裏不是這種情況)的陰影,等於只是引用'myvar'。其次,函數的'__name__'是定義期間使用的名稱(如果稍後手動更改的話),所以即使變量myfuncname不再存在,它也會打印myfuncname而不是myvar。指的是不同的東西。第三,這不是問題所要求的。 -1 – delnan
有可能不是一個名字:
def another:
return something
another().function()
利的回答有,它不依賴於任何內部的Python實現細節很好的特性。列夫的技術是我通常使用的技術。
你可能想看看這個:http://stackoverflow.com/questions/1534504/convert-variable-name-to-string,因爲這是可能的副本的。 – 2012-11-25 19:07:12
什麼是東西? – alexvassel