リフレクションについて質問する際に、私は次のように尋ねました。
いい答え。しかし、言うことと を言うことには違いが
myobject.foo()
ありx = getattr(myobject, "foo"); x();
ます。たとえそれが化粧品であっても。最初に foo() が静的にコンパイルされます。2 番目の例では、文字列はさまざまな方法で作成できます。– ジョー 1時間前
どちらが答えを得ました:
ええと、ジャガイモ/ソラナム・ツベロスム... pythonでは、nietherは静的にコンパイルされるため、多かれ少なかれ同等です。– SWeko 1時間前
Python オブジェクトのメンバーがディクショナリに格納され、すべてが動的であることはわかっていますが、次のコードが与えられていると仮定しました。
class Thing():
def m(self):
pass
t = Thing()
次のコードは、.pyc が生成されるときに静的にコンパイルされます。
t.m()
つまり、コンパイラは のアドレスを知っているm()
ので、実行時にポイント バインディングはありません。それまたはランタイムは、後続のルックアップをキャッシュします。
これには常に辞書のヒットが含まれますが、
meth = getattr(t, "m")
meth()
すべての呼び出しは辞書で文字列検索として扱われますか? それとも、2 つの例は実際には同一ですか?