Les méthodes magiques de Python sont ces fonctions prédéfinies de type __XXX__
en Python.
Le plus grand avantage de l’utilisation des méthodes magiques de Python est que Python fournit des méthodes simples pour que les objets se comportent comme des types intégrés. Fonction
__str__
est utilisée pour traiter le contenu de sortie lors de l'impression de l'instance elle-même. Si cette fonction n'est pas remplacée, un nom d'objet et une adresse mémoire sont affichés par défaut.
Par exemple :
>>> class Student(object): ... def __init__(self,name): ... self._name = name ... >>> print Student()
Sortie : <__main__.Student object at 0x0000000002A929E8>
.
Alors, comment rendre les résultats de sortie plus lisibles ? Nous pouvons remplacer la fonction __str__
. Par exemple, le résultat de sortie de
>>> class Student(object): ... def __init__(self, name): ... self._name = name ... def __str__(self): ... return "I'm a student, named %s" % self._name ... >>> print Student("Charlie")
est : I'm a student, named Charlie
.
Lorsque nous appliquons la fonction str()
à l'objet, nous appelons en fait la fonction __str__
de l'objet.
__repr__
sérialise également les objets, mais __repr__
est davantage visible par le compilateur Python. __str__
C’est plus une question de lisibilité.
Lorsque nous appliquons la fonction repr()
à un objet, ce que nous appelons est en fait la fonction __repr__
de cette fonction.
associé à repr()
est la fonction eval()
. eval()
La fonction est de reconvertir l'objet sérialisé en objet. Le principe est que l'objet implémente la fonction __repr__
.
Le paragraphe ci-dessus est basé sur ma propre compréhension, je ne sais pas s'il est vrai ou faux.
>>> item = [1,2,3] >>> repr(item) '[1, 2, 3]' >>> other_item = eval(repr(item)) >>> other_item[1] 2
Nous utilisons souvent for...in... pour parcourir des listes ou des tuples. C'est la liste qui hérite d'Iterable. Iterable implémente la fonction __iter__.
Pour transformer un objet personnalisé en objet itérable, vous devez implémenter deux méthodes : __iter__
et next
.
__iter__
La fonction renvoie un objet. Lors de l'itération, la fonction next
sera appelée en continu pour obtenir la valeur suivante jusqu'à ce que StopIteration
soit capturée et arrêtée.
Le tutoriel du professeur Liao Xuefeng écrit la méthode __next__
, je ne sais pas pourquoi.
class Fib(object): def __init__(self): self.a, self.b = 0, 1 def __iter__(self): return self def next(self): self.a, self.b = self.b, self.a + self.b if self.a > 10000: raise StopIteration return self.a for i in Fib(): print i
Ce qui précède implémente l'itération des objets en implémentant la fonction __iter__
.
Alors comment implémenter un objet pour extraire des éléments par indice.
Cela se fait en implémentant les méthodes __getitem__
de l'objet.
Donnons-en un