関数を呼び出す変数の名前とその方法を取得できるかどうかを知りたいのですが。例えば :
myVar = something
myVar2 = something
myVar.function()
myVar2.function()
そしてコードは戻るはずです
myVar calls function()
myVar2 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
PSこれはあなたが求めているものとは正確には一致しないことは知っていますが、実際に変数名を使用しようとするよりも優れていると思います。上記のコメントで言及された質問には、その理由を説明する非常に良い答えがあります。
名前がない可能性があります:
def another:
return something
another().function()
Levの答えには、Pythonの内部実装の詳細に依存しないという優れた特性があります。Levのテクニックは私が普段使っているテクニックです。
それを達成するためにいくつかのスタック操作を行うことができますが、私は確かにそれを行うことをお勧めしません。実際のコードでは絶対に使用しないでください。
>>> 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()'
できるよ:
def myfuncname():
pass
myvar=myfuncname
print globals()['myvar'].__name__
変数が割り当てられている関数の名前が出力されます。