Maison >développement back-end >Tutoriel Python >Les dictionnaires Python peuvent-ils être utilisés comme des objets ?

Les dictionnaires Python peuvent-ils être utilisés comme des objets ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-01 11:16:13576parcourir

Can Python Dictionaries Be Used Like Objects?

Les dictionnaires Python peuvent-ils émuler des attributs d'objet ?

L'accès aux clés de dictionnaire en tant qu'attributs d'objet est pratique, mais soulève des questions sur des problèmes potentiels. Cet article explore l'utilisation d'AttrDict, une classe personnalisée conçue pour répondre à ce besoin.

Approche de classe personnalisée

Pour émuler les attributs d'objet pour un dictionnaire, on peut créer un sous-classe appelée AttrDict :

class AttrDict(dict):
    def __getattr__(self, attr):
        return self[attr]
    def __setattr__(self, attr, value):
        self[attr] = value

Avantages de la coutume Classe

  • Commodité :Accès aux clés en tant qu'attributs avec la syntaxe obj.foo
  • Synchronisation automatique : Les attributs et les éléments restent dans sync
  • Gestion des erreurs d'attribut : Inexistant les clés déclenchent AttributeError au lieu de KeyError
  • Prise en charge de la complétion des onglets : Auto-complétion pour les attributs

Inconvénients de la classe personnalisée

  • Collision d'espace de noms : Les méthodes de dictionnaire peuvent être écrasées par les affectations de touches
  • Fuite de mémoire : Problème dans les versions Python antérieures à 2.7.4/3.2.3
  • Avertissements Pylint : Déclenche des avertissements pour les arguments de mots clés inattendus et les membres manquants validation
  • Complexité :Peut paraître déroutant pour les utilisateurs qui ne sont pas familiers avec l'implémentation sous-jacente

Comment ça marche

Le La classe AttrDict s'attribue comme attribut interne __dict__ de l'objet. Cela relie l'espace de noms du dictionnaire aux attributs de l'objet, permettant l'accès via les deux syntaxes.

Raison d'être de Python pour ne pas fournir cette fonctionnalité

Python évite la fonctionnalité d'accès direct aux attributs pour empêcher pollution de l’espace de noms. L'attribution d'éléments de dictionnaire peut potentiellement remplacer les attributs de méthode, entraînant un comportement inattendu. Par exemple :

d = AttrDict()
d.update({'items': ['jacket', 'necktie', 'trousers']})
for k, v in d.items():  # TypeError: 'list' object is not callable

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!

Déclaration:
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