いいえ - それは不可能です。
どうすれば近づくことができるかを考えようとしています-関数への引数をループして引数にこの情報を伝えるデコレータを定義できます。
def toldargs(f):
def wrapper(*args, **kargs):
for i, arg in enumerate(args):
arg.you_are_arg_number(i)
for k in kargs:
kargs[k].you_are_karg_named(k)
return f(*args, **kargs)
return wrapper
@toldargs
def myfunction(a, b):
...
(未コンパイル/未テスト)。
これは、頻繁に呼び出される関数で使用すると、パフォーマンスに大きく影響します。また、メソッドを呼び出す前に、何らかの種類の try/catch またはインスタンス テストが必要になる可能性があります。これは、そのような呼び出しを想定していない引数でのエラーを回避するためです。
更新- もう少し考えてみると、(おそらく) 何かが関数に渡されるタイミングはあまり気にしませんが、インスタンスに対する何らかの操作が呼び出されたときのコンテキストはどうなるか (arg が関数に渡されたが使用されない場合、それなら問題ありません、いずれにせよ私が考えることができます)。
言い換えると:
def some_function(a, b):
# here you can't trigger anything
...
a.foo() # but here you can
が.foo()
呼び出されると、コンテキストを調べることができます。さまざまなアプローチがあります-最も明白/粗雑なのは、例外をスローしてキャッチし、コールスタックを調べることです。ここですべてのツールを使用することもできます。たとえば、現在のスタックを調べて、特定のクラス内から呼び出されているかどうかを確認できます。
繰り返しますが、これは遅くて複雑になる可能性があります...
更新 2 - Python:メタクラス ベースのアプローチのためのクラス インスタンスの初期化前に渡された引数の変更を参照してください。