Dekorator property
Część sekcji Programowanie obiektowe ścieżki Python w Coddy. Lekcja 10 z 64.
Dekorator @property pozwala uzyskiwać dostęp do metod tak jak do atrybutów, zapewniając przejrzysty sposób pobierania i ustawiania wartości. Jest to przydatne przy enkapsulacji, ponieważ pozwala dodawać logikę walidacji lub wartości obliczane bez zmieniania publicznego interfejsu klasy.
Oto przykład klasy używającej @property:
class Circle:
def __init__(self, radius):
self._radius = radius
@property
def radius(self):
return self._radius
@property
def area(self):
return 3.14159 * self._radius ** 2Zwróć uwagę, że używamy self._radius do przechowywania rzeczywistej wartości. Gdybyśmy użyli self.radius wewnątrz metody pobierającej, ponownie wywołałoby to tę metodę, prowadząc do nieskończonej rekurencji.
Utwórz okrąg i uzyskaj dostęp do jego właściwości:
my_circle = Circle(5)Dostęp do właściwości jest taki sam jak do zwykłych atrybutów:
print(my_circle.radius)
print(my_circle.area)Wynik:
5
78.53975Zwróć uwagę, że przy dostępie do właściwości nie używasz nawiasów () — wyglądają jak atrybuty, ale uruchamiają kod metody.
Dodaj setter, aby umożliwić zmianę wartości z walidacją:
class Circle:
def __init__(self, radius):
self._radius = radius
@property
def radius(self):
return self._radius
@radius.setter
def radius(self, value):
if value > 0:
self._radius = value
else:
print("Radius must be positive!")Teraz możesz ustawić promień tak jak atrybut:
my_circle = Circle(5)
my_circle.radius = 10 # Używa settera
print(my_circle.radius) # Używa getteraWynik:
10Kluczowa kwestia: @property sprawia, że metody wyglądają jak atrybuty, natomiast @property_name.setter pozwala kontrolować sposób przypisywania wartości, umożliwiając walidację danych i enkapsulację.
Spróbuj swoich sił
Ta lekcja nie zawiera wyzwania z kodem.
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrzneWprowadzenie do programowania obiektowegoKlasy a obiektyParametr selfMetodyAtrybutyMetoda konstruktora (__init__)Powtórzenie – prosty kalkulator4Dziedziczenie
Podstawy dziedziczeniaFunkcja super()Nadpisywanie metodDziedziczenie wielokrotneKolejność rozwiązywania metodPodsumowanie – hierarchia pracowników7Metody specjalne
Wprowadzenie do metod magicznychPrzeciążanie operatorówMagiczne metody kontenerówPowtórka – własna lista10Wzorce projektowe, część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec ObserverWzorzec Strategy2Dekoratory
Wprowadzenie do dekoratorówDekorator propertyDekorator metody statycznejDekorator metody klasowej5Polimorfizm
Ponowne omówienie nadpisywania metodTypowanie kaczeKlasy i metody abstrakcyjneProjektowanie interfejsówPodsumowanie — kalkulator kształtów8Zaawansowane koncepcje programowania obiektowego
Kompozycja a dziedziczenieMiksyMetody statyczne i klasoweDekoratory klasMenedżery kontekstu11Wzorce projektowe, część 2
Wzorzec PolecenieWzorzec AdapterWzorzec DekoratorWzorzec Metoda szablonowaWzorzec StanWzorzec Kompozyt3Właściwości klas
Zmienne instancji a zmienne klasoweDekoratory właściwościAtrybuty prywatnePowtórzenie — menedżer kont bankowych6Hermetyzacja
Public, Protected, Private — pamięćModyfikatory dostępuUkrywanie informacjiDekoratory właściwości — zaawansowanePodsumowanie — system ewidencji uczniów12Projekt: System zarządzania biblioteką
Przegląd projektuKlasy Book i UserSystem wypożyczeńFunkcja wyszukiwaniaInterfejs administratoraTestowanie i integracjaPoćwicz samodzielnie: Kompilator Python online