Oui, nous pouvons ajouter des méthodes et des attributs personnalisés aux types Python intégrés. Par exemple, disons que vous voulez définir une nouvelle méthode à l'intérieur de la classe list.
Pensons à définir une classe 'list' et écrire votre propre fonction comme suit :
class list:
def custom_method (self):
return("Hey, je suis une méthode personnalisée de la classe list")
# créons un objet ici
obj = list([1,2,3])
print(obj.custom_method())
# Le code ci-dessus s'exécute bien, mais une liste a également une méthode append(), n'est-ce pas ?? essayons
print(obj.append(1))
"""Vous obtiendrez maintenant une erreur d'attribut : l'objet list n'a pas d'attribut append()"""
Parce que, lorsque vous définissez une classe ayant 'list' comme nom de classe, vous ne pourrez plus accéder aux méthodes de la classe 'list' intégrée car 'list' est traitée comme une classe définie par l'utilisateur plutôt qu'une classe intégrée.
Donc, pour se débarrasser de cette erreur, vous pouvez hériter des propriétés / membres de la classe 'list' et vous pouvez définir vos propres méthodes ou attributs. Ainsi, de cette manière, vous pouvez appeler des méthodes de classe définies par l'utilisateur / intégrées en utilisant le même nom de classe.
Voici à quoi cela ressemble :
# Étendre la classe list intégrée
class list(list):
def custom_method (self):
return("Hey, je suis une méthode personnalisée de la classe list")
obj = list([1,2,3])
print(obj.custom_method())
obj.append(1)
print(obj)
Ça fonctionne bien, et renvoie une liste modifiée [1,2,3,1].
REMARQUE : Mais lorsque vous faites cela, cela peut créer des problèmes d'ambiguïté à long terme comme des conflits de nommage
Par exemple, si vous aviez une méthode ayant la même signature qu'une fonction intégrée dans une classe définie par l'utilisateur (disons 'list' ici), alors elle sera remplacée sans votre connaissance ou avis, vous pourrez donc ne pas utiliser sa fonctionnalité d'origine à l'avenir. En considérant le code ci-dessus, si vous définissez jamais une méthode comme append(self, valeur)
, la fonctionnalité originale de append() sera perdue.
Il est donc préférable d'utiliser un nom de classe différent pour le nom de votre classe plutôt que le même nom que le nom de classe intégré
Par exemple, vous pouvez déclarer une classe comme suit qui ne générera aucune erreur ou vous ne rencontrerez aucun conflit de nommage.
class custom_list(list):
def custom_method (self):
return("Hey, je suis une méthode personnalisée de la classe list")
obj = custom_list([1,2,3])
print(obj.custom_method())
obj.append(1)
print(obj)