それが正しいトリッキーになりますなってもはい、これを行う方法があります。 inspect
モジュールを使用すると、コールスタックにアクセスできます。これにより、関数と呼ばれるコードの外観を見ることができます。最後のエントリに二
[(<frame object at 0x107de1d38>, 'path/to/function/file.py', 6, 'func', ['\tstack = inspect.stack()\n'], 0), (<frame object at 0x107d34050>, 'path/to/calling/file.py', 17, '<module>', ['func()\n'], 0)]
お知らせ:['func()\n']
スタックは次のようになります。これはあなたの関数を呼び出すコードを示しています。関数の名前はスタック内の他の場所にも表示されますが、呼び出される方法に関係なく関数の実際の名前が常に表示されます。コールが直接に、または割り当てられた変数を介して行われたかどうかを判断するには、自分で少し仕事をしなければなりません。
これは、関数名を取得する唯一の方法です。 Python does not have a featureを使用して、関数自体から関数名を取得します。
これはちょうどif func_name in stack
よりも難しいことを明らかにするために、関数を呼び出す方法とそれがどのように表示されるかの実際の例をいくつか示しています。関数は独自の名前を判別できないため、関数の先頭にハードコーディングされています。
import inspect
def func(var=None, default=''):
my_name = 'func'
stack = inspect.stack()
func_call = stack[-1][4][0]
print func_call.rstrip() # `func_call` contains a trailing newline
# logic to determine if the name matches
# ...
# ...
x = func
func()
return_value = x(var=1)
print func()
if x():
pass
この版画:ここ
func()
return_value = x(var=1)
print func()
None # This prints from the call, because `func()` doesn't return anything
if x():
それはできません。 –
私はこれをやろうとしません。返すバージョンが1つあり、必要に応じてコールサイトで戻り値を出力します。一般的に、関数は一貫して同じ型を返すようにするか、少なくとも一貫して使用可能な値を返すようにしてください。 – Carcigenicate
クラスの場合は、クラス変数を割り当てることでそれを行うことができます。 – Thameem