"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment puis-je ajouter des attributs et des méthodes personnalisés aux types Python intégrés ?

Comment puis-je ajouter des attributs et des méthodes personnalisés aux types Python intégrés ?

Publié le 2024-11-20
Parcourir:526

How can I add custom attributes and methods to built-in Python types?

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 :

class mydict(dict):
    def helloWorld(self):
        # Custom method implementation
        print("Hello world from mydict!")

Pour remplacer le dict intégré par notre sous-classe, nous pouvons utiliser le module __builtin__ :

import __builtin__
__builtin__.dict = mydict

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() :

d = dict()
d.helloWorld()  # Outputs "Hello world from mydict!"

Cependant, il est important de noter que les objets créés à l'aide de la syntaxe littérale seront toujours des instances du type dict d'origine et n'auront pas vos méthodes ou attributs personnalisés. :

d = {}
d.helloWorld()  # Raises AttributeError

Cela est dû au fait que 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 :

def my_dict(d):
    return mydict(d)

Ensuite, utilisez la fonction au lieu de la syntaxe littérale pour créer des dictionnaires :

d = my_dict({})
d.helloWorld()  # Outputs "Hello world from mydict!"
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3