Les méthodes magiques de Python sont ces fonctions prédéfinies comme __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__
La 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 ? tissu? Nous pouvons remplacer la fonction __str__. Par exemple,
>>> 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")
Le résultat de sortie est :
I'm a student, named Charlie.
Nous appliquons la str() fonction à l'objet, la fonction __str__ de l'objet est en fait appelée.
fonction __repr__
__repr__ sérialise également les objets, mais __repr__ Plus pour le compilateur python . __str__ est plus lisible.
Lorsque nous appliquons la fonction repr() à un objet, ce que nous appelons est en fait la fonction __repr__ de la fonction.
La fonction eval() est associée à repr(). La fonction eval() reconvertit 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
__iter__ fonction
Nous utilisons souvent for...in... pour une liste ou un tuple pour itérer. C'est la liste qui hérite d'Iterable. Iterable implémente la fonction __iter__.
Si vous souhaitez transformer un objet personnalisé en un objet itérable, vous devez implémenter deux méthodes : __iter__ et next.
La fonction __iter__ renvoie un objet. Lors de l'itération, la fonction suivante sera appelée en continu pour obtenir la valeur suivante jusqu'à ce que StopIteration soit capturé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
Fonction __getitem__
Ce qui précède est obtenu en implémentant la fonction __iter__ Itération d'objets.
Alors comment implémenter un objet pour extraire des éléments par indice.
Cela se fait en implémentant la méthode __getitem__ de l'objet.
Donnons-en un