Maison > développement back-end > Tutoriel Python > Pourquoi 'example = list(...)' provoque-t-il une 'TypeError : l'objet 'list' n'est pas appelable' en Python ?

Pourquoi 'example = list(...)' provoque-t-il une 'TypeError : l'objet 'list' n'est pas appelable' en Python ?

Mary-Kate Olsen
Libérer: 2024-12-08 07:00:15
original
288 Les gens l'ont consulté

Why Does

Objets en tant que noms : pourquoi "exemple = liste (...)" provoque "TypeError : l'objet 'list' n'est pas appelable"

Une erreur déroutante survient lors de la tentative d'utilisation du code "example = list('easyhoss')" dans une session Python interactive. Contrairement à l'attente du didacticiel selon laquelle « exemple » deviendrait une liste, cela entraîne une « TypeError : l'objet 'list' n'est pas appelable. »

Shadowing : The Puzzle Solver

La racine de ce problème réside dans l'observation du nom de la "liste" intégrée. Initialement, « liste » fait référence à une classe intégrée. Cependant, lorsque vous attribuez une valeur à « liste », vous créez une variable portant ce nom faisant référence à une instance de la liste.

Par exemple, si vous exécutez le code suivant :

example = list('easyhoss')
list = list('abc')
example = list('easyhoss')  # Error: 'list' is now an instance
Copier après la connexion

Vous changez effectivement la signification de « liste » d’une classe à une instance. Cela amène Python à donner la priorité à l'instance lors de la recherche du nom de la « liste », conduisant à « TypeError ».

Espaces de noms et portée : les concepts de base

Comprendre les espaces de noms et la définition de la portée est cruciale pour résoudre ce problème. Python organise les noms et leurs objets correspondants dans des espaces de noms, qui sont essentiellement des dictionnaires.

Python a une structure d'espace de noms hiérarchique. Lors de l'accès à un nom, Python vérifie d'abord l'espace de noms local. Si le nom n'est pas trouvé, il monte vers l'espace de noms supérieur suivant, jusqu'à ce qu'il épuise tous les espaces de noms et renvoie une NameError. Les fonctions et classes intégrées résident dans l'espace de noms le plus élevé, __builtins__.

Ombrage et résolution : un exemple

Considérez le code suivant :

example = list("abc")  # Works fine
list = list("abc")
example = list("abc")  # TypeError
Copier après la connexion

Après avoir attribué une valeur à « liste », Python recherchera « liste » dans l'espace de noms local. Puisqu'il y trouve l'instance, il ne passera pas à l'espace de noms de niveau supérieur, ce qui entraînera l'erreur.

Éviter les pièges : bonnes pratiques

Pour éviter l'observation et garantir une fonctionnalité appropriée, il est conseillé d'utiliser un IDE qui met en évidence l'observation des noms. De plus, évitez de réattribuer les noms intégrés, car ils sont censés être partagés et accessibles tout au long du programme.

Explorations supplémentaires : classes, instances et appelables

Si vous souhaitez approfondir les classes, les instances et les appelables, reportez-vous à la documentation pour des explications complètes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal