Dekoratory właściwości
Część sekcji Programowanie obiektowe ścieżki Python w Coddy. Lekcja 14 z 64.
Dekoratory właściwości pozwalają kontrolować sposób odczytywania i modyfikowania atrybutów, zachowując przy tym prostą składnię atrybutów.
Oto przykład klasy z metodą pobierającą wartość właściwości:
class Person:
def __init__(self, name, age):
self._name = name
self._age = age
@property
def age(self):
return self._ageUżyj właściwości jak zwykłego atrybutu:
person = Person("Alice", 30)
print(person.age)Wynik:
30Zauważ, że używasz age bez nawiasów, mimo że w rzeczywistości wywołujesz metodę.
Dodaj setter, aby weryfikować dane podczas ustawiania wartości:
class Person:
def __init__(self, name, age):
self._name = name
self._age = age
@property
def age(self):
return self._age
@age.setter
def age(self, value):
if value < 0:
raise ValueError("Age cannot be negative")
self._age = valueTeraz możesz ustawić wiek z automatyczną walidacją:
person = Person("Alice", 30)
person.age = 31 # Używa settera z walidacją
print(person.age) # Używa gettera
# To spowodowałoby błąd:
# person.age = -5 # ValueError: Wiek nie może być ujemnyWynik:
31Utwórz właściwości obliczane, które obliczają wartości:
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
@property
def area(self):
return self.width * self.height
rect = Rectangle(5, 3)
print(rect.area) # Oblicza 5 * 3 = 15Wynik:
15Najważniejsze: Dekoratory właściwości sprawiają, że metody wyglądają jak atrybuty. Użyj @property dla metod odczytujących i @attribute_name.setter dla metod ustawiających. Pozwala to na walidację danych i obliczanie wartości przy zachowaniu prostej składni dostępu do atrybutów.
Wyzwanie
ŚredniUzupełnij klasę Temperature w pliku temperature.py, która konwertuje temperaturę między stopniami Celsjusza i Fahrenheita. Następnie użyj tej klasy w pliku driver.py, aby przetestować konwersje temperatury. Postępuj zgodnie z komentarzami TODO w obu plikach, wykonując instrukcje krok po kroku.
Wyświetl każdą konwersję w formacie [celsius]°C is [fahrenheit]°F, przy czym wartość w stopniach Celsjusza ma być dokładnie taka, jak podano, a wartość w stopniach Fahrenheita — taka, jak obliczy ją Python. Nie zaokrąglaj ani nie formatuj liczb. Dwie linie wygenerowane przez sterownik to:
25°C is 77.0°F
37.0°C is 98.6°FSpróbuj swoich sił
# TODO: Zaimportuj klasę Temperature z modułu temperature
# Przetestuj klasę:
# TODO: Utwórz instancję temperatury o wartości 25°C
temp = None # Zastąp rzeczywistą instancją Temperature
# TODO: Wyświetl wartości w stopniach Celsjusza i Fahrenheita
# TODO: Użyj formatu: "25°C is 77.0°F" (wyświetl obie wartości bez zmian, bez zaokrąglania ani formatowania)
# TODO: Ustaw temperaturę na 98.6°F
# TODO: Ponownie wyświetl obie wartości, aby potwierdzić, że przeliczanie działa
# TODO: Użyj tego samego formatu co wcześniejTa 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