Maison  >  Article  >  développement back-end  >  Tutoriel de code pour la surcharge des opérateurs Python

Tutoriel de code pour la surcharge des opérateurs Python

Y2J
Y2Joriginal
2017-05-15 11:34:251719parcourir

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

len(X)bool(X)le , ge, La comparaison spécifique eq : égal, ne : pas égal iaddAjout de champ (amélioré)X+=Y( ou Itérer Test d'adhésion élément en hex(X), bin(X), oct(X)entrer, sortirGestionnaire d'environnementavec obj comme var :obtenir, définir, X.attr, X.attr=value , del X.attr

Nom de la méthode

Description de la surcharge

Méthode d'appel de l'opérateur

init

Constructeur

Création d'objet : X = Class(args)

del

Destructeur

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

AttributRéférence

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,

eq, ne

est X632bf1420c84fd56a79a6bad534b1b35Y, X5cd989d1b362138889b7230a517ce0fc =Y,

X==Y, : moins égal, ge : plus grand égal,

radd

Ajout du côté droit

autre+X

sinon

ajouter)

iter,

suivant

I=iter(X) , next()

contient

supprimer

Attribut de descripteur

nouveau

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(&#39;Tim&#39;) 
init Tim 
>>> h = &#39;a&#39; 
del

Opérations d'addition et de soustraction : ajouter et sous

La surcharge de ces deux méthodes peut ajouter des opérations d'opérateur + aux objets ordinaires . Le code suivant montre comment utiliser l'opérateur +- Si vous supprimez la sous-méthode dans le code, puis appelez l'opérateur moins, une erreur se produira.

>>> 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

Ces deux méthodes sont utilisées pour représenter des objets L'expression chaîne : les méthodes print(), str() appelleront la méthode str, et les méthodes print(), str() et repr() appelleront la méthode repr. Comme le montre l'exemple ci-dessous, lorsque deux méthodes sont définies en même temps, Python donnera la priorité à la recherche et à l'appel de la méthode str.

>>> class Str(object): 
...   def str(self): 
...     return "str called"   
...   def repr(self): 
...     return "repr called" 
...  
>>> s = Str() 
>>> print(s) 
str called 
>>> repr(s) 
&#39;repr called&#39; 
>>> str(s) 
&#39;str called&#39;

Acquisition et affectation de valeur d'index : getitem, setitem

En mettant en œuvre ces deux méthodes, vous pouvez associer des éléments sous la forme de X[i ] Les objets peuvent être récupérés et des valeurs attribuées, et des opérations de découpage peuvent également être utilisées sur des objets.

>>> 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]
Définir et accéder aux attributs : getattr, setattr


Nous pouvons intercepter l'accès aux membres des objets en surchargeant getattr et setattr. getattr est automatiquement appelé lors de l'accès à un membre qui n'existe pas dans l'objet. La méthode setattr est utilisée pour appeler lors de l'initialisation des membres de l'objet, c'est-à-dire que la méthode setattr sera appelée lors de la définition de l'élément dict. L'exemple spécifique est le suivant :

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()
Le résultat de l'exécution du code ci-dessus est le suivant. À partir du résultat, on peut voir que la méthode getattr sera appelée lors de l'accès au variable

x ; lorsque init est appelé, l'opération d'affectation appellera également la méthode setattr.

setattr 
setattr 
{&#39;a&#39;: 1, &#39;b&#39;: 2} 
getattr 
setattr 
{&#39;a&#39;: 1, &#39;x&#39;: 3, &#39;b&#39;: 2}
Objet Iterator : iter, next


L'itération en Python peut être implémentée directement en surchargeant la méthode getitem Voir l'exemple ci-dessous.



L'itération peut être réalisée via la méthode ci-dessus, mais ce n'est pas la meilleure façon. L'opération d'itération de Python tentera d'abord d'appeler la méthode iter, puis d'essayer d'obtenir l'élément. L'environnement itératif est implémenté en utilisant iter pour essayer de trouver la méthode iter, qui renvoie un objet itérateur. Si cette méthode est fournie, Python appellera à plusieurs reprises la méthode next() de l'objet itérateur jusqu'à ce que l'exception S
>>> 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
top

Iteration se produise. Si iter n'est pas trouvé, Python essaiera d'utiliser le mécanisme getitem. Regardons un exemple d'itérateur.


Les résultats d'exécution du programme sont les suivants :
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

On peut voir qu'après la mise en œuvre de l'iter et méthodes next, vous pouvez utiliser for in La méthode parcourt l'objet
next called 
4 
next called 
5 
next called 
6 
next called 
----------- 
next called 
4 
next called 
5 
next called 
6 
next called
, et l'objet peut également être itéré via les méthodes iter() et next().

【Recommandations associées】

1.

Recommandation spéciale

 : 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!

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