Ich möchte eine Python-Klasse mit dem Namen "Foo" erstellen, die ein Attribut namens "x" hat, das ein int mit dem Standardwert 0 ist. Wenn ich x einen positiven Wert zuweise, ändert sich dieser automatisch in 10 und wenn ich ein Negativ zuweise Wert, den es auf -10 ändern würde. zum Beispiel:
>>p = Foo()
>>print(p.x)
0
>>p.x = -45
>>print(p.x)
-10
>>p.x = 85
>>print(p.x)
10
Verwenden Sie den property
Dekorateur:
Sie definieren zuerst _x
als Klassenmitglied im Konstruktor:
def __init__(self):
self._x = 0
und initialisiere es mit 0
.
Dann definieren Sie x
als Eigenschaft:
@property
def x(self):
return self._x
Dies bedeutet, dass wir die Werte von _x
durch den Namen erhalten können x
.
Dann definieren Sie Setter für x
mit @x.setter
:
@x.setter
def x(self, value):
self._x = 10 if value > 0 else (-10 if value < 0 else 0)
Dies überschreibt die ursprüngliche Logik zum Festlegen des Werts auf x
die von Ihnen definierte.
ACHTUNG: _x
ist immer noch verfügbar , und wenn Sie es ändern, hält die oben definierte Magie nicht an (es gibt keine private
Klassenmitglieder wie in anderen Sprachen wie C, C ++, C #, Java usw.). Dinge, die _
konventionell beginnen, bedeuten, dass sie von internem Nutzen sind.
Code:
class Foo(object):
def __init__(self):
self._x = 0
@property
def x(self):
return self._x
@x.setter
def x(self, value):
self._x = 10 if value > 0 else (-10 if value < 0 else 0)
p = Foo()
# 0
print(p.x)
p.x = -45
# -10
print(p.x)
p.x = 85
# 10
print(p.x)
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen