クラス変数は関数定義内のリスト内包表記でアクセスできますが、クラス定義内のリスト内包表記ではアクセスできません。 。この矛盾は、クラス スコープがリスト内包表記や、ジェネレーター式や関数定義などの他の囲まれたスコープには拡張されないという事実から生じます。
代わりに、リスト内包表記やその他のそのような式には独自のローカル スコープがあり、それらの式にはアクセスできません。囲むクラススコープで定義された変数。この動作は、Python のすべてのバージョンで一貫しています。
クラス定義内のリスト内包表記でクラス変数にアクセスするには、次の回避策のいずれかを使用できます。
次の例を考えてみましょう:
この例でクラス変数 x を使用するには場合は、次のいずれかの回避策を使用できます:
明示的なfunction:
__init__ を使用してインスタンス変数を作成する:
前述の回避策にもかかわらず、一般に、クラス内のリスト内包表記からクラス変数にアクセスすることは避けることをお勧めします。定義。この方法では、特に他の開発者と共同作業する場合に、混乱や潜在的なエラーが発生する可能性があります。
よりクリーンで保守しやすいアプローチとして、クラス定義内のクラス変数にアクセスするためのリスト内包表記の代わりに関数またはインスタンス変数を使用することを検討してください。
以上がPython のクラス定義内のリスト内包表記でクラス変数に直接アクセスできないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。