Die sogenannte verzögerte Berechnung von Klassenattributen besteht darin, die Attribute der Klasse als Eigenschaft zu definieren, die nur beim Zugriff berechnet wird, und nach dem Zugriff wird das Ergebnis ohne Notwendigkeit zwischengespeichert Mach es jedes Mal. Alles berechnet. Der Hauptzweck des Aufbaus einer verzögerten Berechnungseigenschaft besteht darin, die Leistung zu verbessern von Eigenschaften in einen Methodenaufruf.
Wie Sie sehen können, kann c.area nach dem Hinzufügen von @property direkt als Property-Zugriff ausgeführt 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 verzögert berechnete Dekoratorklasse 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 jedes Mal „Computing“ gedruckt wird berechnet. Fläche“, während „Rechenfläche“ nur einmal nach zweimaligem Aufruf von c.area ausgegeben wurde. 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 vonVerzögerte Initialisierung zur Verbesserung der Python-Leistung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!