Wenn ich eine Klasse erstellen, die Eigenschaften speichern muss, wann ist es angebracht, einen Dekorator zu verwenden und wann sollte ich sie einfach in __init__
definieren?Klassenattribute in __init__ vs mit @property deklarieren
Die Gründe, warum ich mir vorstellen kann:
sagen, dass ich eine Klasse wie
class Apple:
def __init__(self):
self.foodType = "fruit"
self.edible = True
self.color = "red"
fein Das funktioniert haben. In diesem Fall ist es mir ziemlich klar, dass ich nicht die Klasse schreiben soll:
class Apple:
@property
def foodType(self):
return "fruit"
@property
def edible(self):
return True
@property
def color(self):
return "red"
aber sage, dass ich eine kompliziertere Klasse, die langsame Methoden hat (zum Beispiel Daten über das Internet zu holen).
konnte ich diese Zuordnung von Attributen in __init__
implementieren:
class Apple:
def __init__(self):
self.wikipedia_url = "https://en.wikipedia.org/wiki/Apple"
self.wikipedia_article_content = requests.get(self.wikipedia_url).text
oder ich könnte dies implementieren mit @property
:
class Apple:
def __init__(self):
self.wikipedia_url = "https://en.wikipedia.org/wiki/Apple"
@property
def wikipedia_article_content(self):
return requests.get(self.wikipedia_url).text
In diesem Fall wird die letztere etwa 50.000-mal schneller ist zu instanziiert. Ich konnte jedoch argumentieren, dass, wenn ich wikipedia_article_content
mehrere Male wurde holen, ersteres ist schneller:
a = Apple()
a.wikipedia_article_content
a.wikipedia_article_content
a.wikipedia_article_content
In diesem Fall ist die ehemalige ~ 3-mal schneller, weil es ein Drittel der Anzahl der Anfragen hat.
Meine Frage
ist der einzige Unterschied zwischen Zuweisung Eigenschaften in diesen beiden Möglichkeiten, die, die ich gedacht habe? Was erlaubt mir sonst noch außer Zeit zu sparen (in einigen Fällen)? Für Eigenschaften, die einige Zeit benötigen, um sie zuzuweisen, gibt es einen "richtigen Weg", um sie zuzuweisen?