私は英語の母国語ではないよ、と私はセクション9.6プライベート変数とクラスのローカル参照でhttps://docs.python.org/2/tutorial/classes.html#private-variables-and-class-local-referencesプライベート変数とクラスのローカル参照は
でのpythonを学び、最後の段落は次のように述べている。
exec、eval()またはexecfile()に渡されるコードは、 では、呼び出し元クラスのクラス名が現在のクラスであるとみなされないことに注意してください。 これはグローバルステートメントの効果に似ていますが、同じようにバイトコンパイルされたコードに同様に制限されている の効果があります。 dictを直接参照する場合と同様に、getattr()、setattr()、およびdelattr()にも同じ制限が適用されます( )。
このテキストについてはまったく分かりません。このアイデアを実証するための例を説明してください。
答えに従えば、exec()またはeval()の名前空間にはプライベート属性は含まれていないと思いますか? "これはグローバルステートメントの効果と似ていますが、その効果は同じようにバイトコンパイルされたコードに制限されます。同じ制限がgetattr()、setattr()、delattr ()、およびdictを直接参照するときに使用します。 – user3044330
@ user3044330 'global'文は、現在のコードブロック(_"一緒にバイトコンパイルされたコード "_)のコードにのみ影響します。私的な属性の名前を変更するのと同じことです。 'exec'や' eval'のコードはクラスコードと一緒にバイトコンパイルされていないので、そこに名前のマングリングは起こりません。 –
これは、exec()またはeval()が "グローバルステートメント"であり、 "クラスブロック"で使用できなかったことを意味していますか?あなたは多くの手助けをしてくれました。私はexec()、eval()を検索し、それらに関する深い知識を得るでしょう。どうもありがとうございます。 – user3044330