Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Använda getters och setters | Inkapsling
Objektorienterad Programmering i Python

bookAnvända getters och setters

Svep för att visa menyn

Egenskaper och getters/setters ger kontrollerad åtkomst till klassdata, vilket omvandlar enkel attributåtkomst till kraftfulla, validerade och beräknade interaktioner. De överbryggar klyftan mellan direkt attributanvändning och metodbaserad kontroll, och kombinerar läsbarhet med robusthet.

Egenskaper i Python använder descriptorprotokollet i bakgrunden. Detta gör att metoder dekorerade med @property kan bete sig som attribut samtidigt som de kör anpassad logik.

12345678910111213141516171819202122
class Temperature: def __init__(self, celsius): self._celsius = celsius @property def celsius(self): return self._celsius @celsius.setter def celsius(self, value): if -273.15 <= value <= 1e4: # validation self._celsius = value else: raise ValueError("Invalid temperature") @property def fahrenheit(self): return (self._celsius * 9/5) + 32 t = Temperature(25) print(t.fahrenheit) # Computed property t.celsius = -300 # Raises ValueError
copy

Professionella mönster inkluderar lata utvärderingar för kostsamma beräkningar, cachning för ofta åtkomna värden, tydliga felmeddelanden vid validering och omfattande dokumentation av egenskapens beteende. Egenskaper bör upplevas som naturliga attribut samtidigt som de ger metodernas kontroll.

Prestandaöverväganden är viktiga för ofta åtkomna egenskaper. Enkla getters/setters har minimal påverkan, men komplex validering eller tunga beräkningar kan försämra prestandan. I sådana fall är cachning, lata utvärderingar och effektiva algoritmer avgörande.

Valet mellan egenskaper och traditionella getters/setters beror på behov: egenskaper erbjuder renare syntax och följer Pythons idiom, medan explicita metoder kan vara bättre för komplex validering eller metodbaserade API:er.

question mark

Vilken fördel ger Python-egenskaper jämfört med traditionella getter- och setter-metoder?

Vänligen välj det korrekta svaret

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 5. Kapitel 3

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Avsnitt 5. Kapitel 3
some-alt