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

名前がない可能性があります:

def another:
    return something 

another().function()

Levの答えには、Pythonの内部実装の詳細に依存しないという優れた特性があります。Levのテクニックは私が普段使っているテクニックです。

于 2012-11-25T19:08:42.740 に答える
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 に答える
0

できるよ:

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

変数が割り当てられている関数の名前が出力されます。

于 2012-11-25T19:03:46.367 に答える