Heim  >  Artikel  >  Backend-Entwicklung  >  Verzögerte Auswertung von Python-Klassenattributen

Verzögerte Auswertung von Python-Klassenattributen

高洛峰
高洛峰Original
2016-11-23 09:53:151197Durchsuche

Die sogenannte verzögerte Berechnung von Klassenattributen besteht darin, die Attribute der Klasse als Eigenschaften zu definieren, die nur beim Zugriff berechnet werden. Nach dem Zugriff wird das Ergebnis zwischengespeichert und muss nicht jedes Mal berechnet werden .

Vorteile

Der Hauptzweck der Erstellung eines Lazy-Calculation-Attributs besteht darin, die Leistung zu verbessern

Implementierung

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 valueimport mathclass 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

Erklärung

definiert Eine verzögert ausgewertete 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:

>>> c = Circle(2)
>>> print c.area
Computing area
12.5663706144
>>> print c.area
12.5663706144

In area() wird „Rechenfläche“ bei jeder Berechnung einmal gedruckt und c aufgerufen zweimal hintereinander wird „Computing Area“ nur einmal nach .area gedruckt. Dies liegt an LazyProperty. Solange es einmal aufgerufen wird, wird es nicht wiederholt, unabhängig davon, wie viele nachfolgende Aufrufe erfolgen.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn