Heim >Backend-Entwicklung >Python-Tutorial >Python-Magic-Methode: Machen Sie benutzerdefinierte Klassen eher zu integrierten Typen
Pythons magische Methoden sind die vordefinierten Funktionen vom Typ __XXX__ in Python.
Der größte Vorteil der Verwendung der magischen Methoden von Python besteht darin, dass Python einfache Methoden bereitstellt, mit denen sich Objekte wie integrierte Typen verhalten.
__str__-Funktion
__str__-Funktion wird verwendet, um den Ausgabeinhalt beim Drucken der Instanz selbst zu verarbeiten. Wenn diese Funktion nicht überschrieben wird, werden standardmäßig ein Objektname und eine Speicheradresse ausgegeben.
Zum Beispiel:
>>> class Student(object): ... def __init__(self,name): ... self._name = name ... >>> print Student()
Ausgabe:
<__main__.Student object at 0x0000000002A929E8>.
Wie machen wir also die Ausgabeergebnisse lesbarer? Tuch? Wir können die Funktion __str__ überschreiben. Zum Beispiel:
>>> 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")
Das Ausgabeergebnis ist:
I'm a student, named Charlie.
Wir wenden str() an Funktion zum Objekt hinzufügt, wird tatsächlich die __str__-Funktion des Objekts aufgerufen.
__repr__-Funktion
__repr__ serialisiert auch Objekte, aber __repr__ Mehr für den Python-Compiler . __str__ ist besser lesbar.
Wenn wir die Funktion repr() auf ein Objekt anwenden, rufen wir tatsächlich die Funktion __repr__ der Funktion auf.
Gepaart mit repr() ist die Funktion eval(). Die Funktion eval() wandelt das serialisierte Objekt wieder in ein Objekt um. Voraussetzung ist, dass das Objekt die Funktion __repr__ implementiert.
Der obige Absatz basiert auf meinem eigenen Verständnis, ich weiß nicht, ob er richtig oder falsch ist.
>>> item = [1,2,3] >>> repr(item) '[1, 2, 3]' >>> other_item = eval(repr(item)) >>> other_item[1] 2
__iter__-Funktion
Wir verwenden oft for...in... für Listen oder Tupel zum Iterieren. Das heißt, die Liste erbt von Iterable. Iterable implementiert die Funktion __iter__.
Wenn Sie ein benutzerdefiniertes Objekt in ein iterierbares Objekt umwandeln möchten, müssen Sie zwei Methoden implementieren: __iter__ und next.
Die Funktion __iter__ gibt ein Objekt zurück. Beim Iterieren wird die nächste Funktion kontinuierlich aufgerufen, um den nächsten Wert abzurufen, bis StopIteration erfasst wird.
Das Tutorial von Lehrer Liao Xuefeng schreibt die __next__-Methode, ich weiß nicht warum.
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
__getitem__-Funktion
Das Obige wird durch die Implementierung der __iter__-Funktion erreicht Iteration von Objekten.
So implementieren Sie ein Objekt, um Elemente per Index zu extrahieren.
Dies geschieht durch Implementierung der __getitem__-Methode des Objekts.
Lass uns eins schenken