Die sogenannte verzögerte Berechnung von Klassenattributen besteht darin, die Attribute der Klasse als Eigenschaft zu definieren, die nur bei Zugriff berechnet wird. Sobald darauf zugegriffen wird, wird das Ergebnis zwischengespeichert, ohne dass dies erforderlich ist Mach es jedes Mal. Alles berechnet. Der Hauptzweck der Erstellung einer Eigenschaft für verzögerte Berechnungen besteht darin, die Leistung zu verbessern.
Wie Sie sehen können, kann c.area nach dem Hinzufügen von @property direkt ausgeführt und als Eigenschaft aufgerufen werden, obwohl der Bereich als Methode definiert ist.
class Circle(object): def init(self, radius): self.radius = radius @property def area(self): return 3.14 * self.radius ** 2 c = Circle(4) print c.radius print c.area
Beschreibung
Definiert eine Lazy-Calculation-Decorator-Klasse LazyProperty. Circle ist eine zum Testen verwendete Klasse. Die Circle-Klasse verfügt über drei Attribute: Radius, Fläche und Umfang. Die Eigenschaften von Fläche und Umfang werden von LazyProperty dekoriert. Probieren wir die Magie von LazyProperty aus:
class LazyProperty(object): def init(self, func): self.func = func def get(self, instance, owner): if instance is None: return self else: value = self.func(instance) setattr(instance, self.func.name, value) return value import math class Circle(object): def init(self, radius): self.radius = radius @LazyProperty def area(self): print 'Computing area' return math.pi * self.radius ** 2 @LazyProperty def perimeter(self): print 'Computing perimeter' return 2 * math.pi * self.radius
In area() wird „Rechenfläche“ einmal bei jeder Berechnung gedruckt und fortlaufend aufgerufen. „Computing Area“ wird nur einmal nach „c.area“ zweimal gedruckt. Dies liegt an LazyProperty. Solange es einmal aufgerufen wird, wird es nicht erneut gezählt, unabhängig davon, wie viele nachfolgende Aufrufe getätigt werden.
>>> c = Circle(2) >>> print c.area Computing area 12.5663706144 >>> print c.area 12.5663706144
-->
Das obige ist der detaillierte Inhalt vonVerwenden Sie die verzögerte Initialisierungsmethode, um die Python-Leistung zu verbessern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!