ホームページ >バックエンド開発 >Python チュートリアル >Python で「example = list(...)」によって「TypeError: 'list' Object Is Not Callable」が発生するのはなぜですか?
名前としてのオブジェクト: "example = list(...)" が "TypeError: 'list' Object Is Not Callable" を引き起こす理由
対話型 Python でコード「example = list('easyhoss')」を使用しようとすると、不可解なエラーが発生しますセッション。 「example」がリストになるというチュートリアルの予想に反して、「TypeError: 'list' object is not callable.」という結果になります。
Shadowing: The Puzzle Solver
この問題の根本は、組み込みの「リスト」名のシャドウイングにあります。最初は、「リスト」は組み込みクラスを指します。ただし、「list」に値を割り当てると、リストのインスタンスを参照するその名前の変数が作成されます。
たとえば、次のコードを実行するとします。
example = list('easyhoss') list = list('abc') example = list('easyhoss') # Error: 'list' is now an instance
「リスト」の意味をクラスからインスタンスに効果的に変更します。これにより、Python は「リスト」名を検索するときにインスタンスを優先し、「TypeError」が発生します。
名前空間とスコープ: 中心的な概念
名前空間についてこの問題を解決するには、スコープ設定が重要です。 Python は、名前とそれに対応するオブジェクトを名前空間に編成します。これは本質的には辞書です。
Python は階層的な名前空間構造を持っています。名前にアクセスするとき、Python は最初にローカルの名前空間をチェックします。名前が見つからない場合は、次に上位の名前空間に進み、すべての名前空間を使い果たし、NameError がスローされるまで続行します。組み込み関数とクラスは、最上位の名前空間 __builtins__ に存在します。
シャドウイングと解決: 例
次のコードを考えてみましょう:
example = list("abc") # Works fine list = list("abc") example = list("abc") # TypeError
「list」に値を割り当てた後、Python はローカル名前空間で「list」を検索します。そこでインスタンスが見つかるため、上位レベルの名前空間に進むことができず、エラーが発生します。
落とし穴の回避: ベスト プラクティス
シャドウイングを回避するには適切な機能を確保するには、名前のシャドウイングを強調表示する IDE を使用することをお勧めします。さらに、組み込み名の再割り当ては避けてください。組み込み名はプログラム全体で共有され、アクセスできるように意図されているためです。
さらなる調査: クラス、インスタンス、および呼び出し可能
Ifクラス、インスタンス、呼び出し可能オブジェクトについてさらに詳しく知りたい場合は、ドキュメントの包括的な説明を参照してください。
以上がPython で「example = list(...)」によって「TypeError: 'list' Object Is Not Callable」が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。