Extension des types Python intégrés avec des attributs et des méthodes personnalisés
En Python, extension des types intégrés tels que des dictionnaires avec des méthodes ou des attributs personnalisés peut sembler une demande simple. Cependant, la conception de Python ne prend pas nativement en charge de telles modifications. Contrairement au mécanisme d'héritage des prototypes de JavaScript, les types intégrés de Python sont statiques et immuables.
Approche alternative : sous-classement de classe
Bien que l'ajout direct de méthodes aux types intégrés ne soit pas Si possible, vous pouvez obtenir un effet similaire en sous-classant le type et en le remplaçant dans l'espace de noms global. Cela vous permet d'ajouter des attributs et des méthodes personnalisés aux instances de la nouvelle sous-classe.
Par exemple, supposons que nous souhaitions ajouter une méthode helloWorld() au type dict. Nous pouvons créer la sous-classe suivante :
<code class="python">class mydict(dict): def helloWorld(self): # Custom method implementation print("Hello world from mydict!")</code>
Pour remplacer le dict intégré par notre sous-classe, nous pouvons utiliser le module __builtin__ :
<code class="python">import __builtin__ __builtin__.dict = mydict</code>
Utilisation et limitations
Désormais, tous les futurs dictionnaires créés à l'aide du constructeur dict seront des instances de mydict et auront la méthode helloWorld() :
<code class="python">d = dict() d.helloWorld() # Outputs "Hello world from mydict!"</code>
Cependant, il est important de noter que les objets créés à l'aide la syntaxe littérale sera toujours des instances du type dict d'origine et n'aura pas vos méthodes ou attributs personnalisés :
<code class="python">d = {} d.helloWorld() # Raises AttributeError</code>
En effet, la syntaxe littérale contourne le processus de construction d'objet et crée directement des instances de types intégrés. Pour surmonter cette limitation, vous pouvez définir une fonction qui convertit les objets intégrés en instances de votre sous-classe :
<code class="python">def my_dict(d): return mydict(d)</code>
Ensuite, utilisez la fonction au lieu de la syntaxe littérale pour créer des dictionnaires :
<code class="python">d = my_dict({}) d.helloWorld() # Outputs "Hello world from mydict!"</code>
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!