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

Verzögerte Auswertung von Python-Klassenattributen

WBOY
WBOYOriginal
2016-12-05 13:27:161265Durchsuche

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

Vorteile

Der Hauptzweck der Konstruktion einer verzögert berechneten Eigenschaft besteht darin, die Leistung zu verbessern

Leistung

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

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:

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

„Rechenfläche“ wird einmal für jede Berechnung in area() gedruckt, aber „Rechenfläche“ wird nur einmal gedruckt, nachdem c.area zweimal aufgerufen wurde. Dies liegt an LazyProperty. Solange es einmal aufgerufen wird, wird es nicht erneut gezählt, unabhängig davon, wie viele nachfolgende Aufrufe erfolgen.

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er für das Studium aller hilfreich sein wird. Ich hoffe auch, dass jeder Script House unterstützt.

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