Cet article présente principalement l'explication détaillée et l'exemple de code de la surcharge des opérateurs Python. Les amis qui en ont besoin peuvent se référer à la
Surcharge des opérateurs Python
fournie par le langage Python. Il a la fonction de surcharge d’opérateurs et améliore la flexibilité du langage. Ceci est quelque peu similaire mais quelque peu différent du C++. Compte tenu de sa nature particulière, nous discuterons aujourd'hui de la surcharge des opérateurs Python.
Le langage Python lui-même fournit de nombreuses méthodes magiques, et sa surcharge d'opérateurs est obtenue en réécrivant ces méthodes magiques intégrées à Python. Ces méthodes magiques commencent et se terminent toutes par des traits de soulignement doubles, similaires à la forme de X. Python utilise cette méthode de dénomination spéciale pour intercepter l'opérateur afin d'obtenir une surcharge. Lorsque les opérations intégrées de Python sont appliquées à la classe objet , Python recherchera et appellera la méthode spécifiée dans l'objet pour terminer l'opération. La classe
peut surcharger les opérations intégrées telles que l'addition et la soustraction, l'impression, l'appel de fonction, l'index, etc. La surcharge d'opérateurs rend nos objets comportement Identique aux objets intégrés. Python appellera automatiquement une telle méthode lors de l'appel d'un opérateur. Par exemple, si une classe implémente la méthode add, cette méthode sera appelée lorsqu'un objet de la classe apparaîtra dans l'opérateur +.
Méthodes courantes de surcharge des opérateurs
Nom de la méthode |
Description de la surcharge |
Méthode d'appel de l'opérateur |
init |
Création d'objet : X = Class(args) |
|
del |
Objet X récupéré |
|
ajouter/ sub |
Opérations d'addition et de soustraction |
X+Y, X+=Y/X-Y, X-=Y |
ou |
Opérateur| |
X|Y, X|= Y |
_repr/str |
Imprimer/Convertir |
imprimer (X), repr (X)/str(X) |
ctous |
Appel de fonction |
X(*args, **kwargs) |
getattr |
X.undefined |
|
setattr |
Affectation d'attribut |
X.any=value |
delattr |
attributsupprimer |
del X.any |
getattribute |
Attribut get |
X.any |
getitem |
Opération d'indexation |
X[clé], X[i:j] |
setitem |
affectation d'index |
X[clé], X [i:j] =sequence |
delitem |
Suppression d'index et de fragments |
del X[key], del |
bool |
Test booléen |
|
lt, gt, | le , ge, eq, ne |
|
est X X==Y, : moins égal, ge : plus grand égal, | eq : égal, ne : pas égal ) |
radd autre+X |
Ajout de champ (amélioré) | X+=Y( ou | sinon ajouter) |
iter, suivant |
Itérer | |
Test d'adhésion | élément en | hex(X), bin(X), oct(X) |
entrer, sortir | Gestionnaire d'environnement | avec obj comme var : |
obtenir, définir, | Attribut de descripteur |
|
Créer |
avant l'initialisation Création d'objets |
Ce qui suit est une introduction à l'utilisation des méthodes d'opérateur couramment utilisées.
Constructeur et destructeur : init et del
Leur fonction principale est de créer et de recycler des objets Lorsqu'une instance est créée, l'init<.> méthode constructeur sera appelée. Lorsque l'objet instance est récupéré, le destructeur del sera exécuté automatiquement.
>>> class Human(): ... def init(self, n): ... self.name = n ... print("init ",self.name) ... def del(self): ... print("del") ... >>> h = Human('Tim') init Tim >>> h = 'a' del
Opérations d'addition et de soustraction : ajouter et sous
>>> class Computation(): ... def init(self,value): ... self.value = value ... def add(self,other): ... return self.value + other ... def sub(self,other): ... return self.value - other ... >>> c = Computation(5) >>> c + 5 10 >>> c - 3 2
String forme d'expression de l'objet : repr et str
>>> class Str(object): ... def str(self): ... return "str called" ... def repr(self): ... return "repr called" ... >>> s = Str() >>> print(s) str called >>> repr(s) 'repr called' >>> str(s) 'str called'
Acquisition et affectation de valeur d'index : getitem, setitem
>>> class Indexer: data = [1,2,3,4,5,6] def getitem(self,index): return self.data[index] def setitem(self,k,v): self.data[k] = v print(self.data) >>> i = Indexer() >>> i[0] 1 >>> i[1:4] [2, 3, 4] >>> i[0]=10 [10, 2, 3, 4, 5, 6]
class A(): def init(self,ax,bx): self.a = ax self.b = bx def f(self): print (self.dict) def getattr(self,name): print ("getattr") def setattr(self,name,value): print ("setattr") self.dict[name] = value a = A(1,2) a.f() a.x a.x = 3 a.f()
x ; lorsque init est appelé, l'opération d'affectation appellera également la méthode setattr.
setattr setattr {'a': 1, 'b': 2} getattr setattr {'a': 1, 'x': 3, 'b': 2}
L'itération en Python peut être implémentée directement en surchargeant la méthode getitem Voir l'exemple ci-dessous.
>>> class Indexer: ... data = [1,2,3,4,5,6] ... def getitem(self,index): ... return self.data[index] ... >>> x = Indexer() >>> for item in x: ... print(item) ... 1 2 3 4 5 6
Iteration se produise. Si iter n'est pas trouvé, Python essaiera d'utiliser le mécanisme getitem. Regardons un exemple d'itérateur.
class Next(object): def init(self, data=1): self.data = data def iter(self): return self def next(self): print("next called") if self.data > 5: raise StopIteration else: self.data += 1 return self.data for i in Next(3): print(i) print("-----------") n = Next(3) i = iter(n) while True: try: print(next(i)) except Exception as e: break
next called 4 next called 5 next called 6 next called ----------- next called 4 next called 5 next called 6 next called
: Téléchargement de la version V0.1 de "php Programmer Toolbox"2. Tutoriel vidéo Python gratuit
3 Tutoriel d'introduction de base de Python
.
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!