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 uzyskiwania dostępu do atrybutów i ich modyfikowania, 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:
30Zwróć uwagę, że odwołujesz się do age bez nawiasów, mimo że tak naprawdę wywołujesz metodę.
Dodaj metodę ustawiającą, 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 wyliczają 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 pobierających wartości, a @attribute_name.setter dla metod ustawiających wartości. 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 wartości między stopniami Celsjusza a Fahrenheita. Następnie użyj tej klasy w pliku driver.py, aby przetestować konwersje temperatur. Postępuj zgodnie z komentarzami TODO w obu plikach, które zawierają instrukcje krok po kroku.
Wypisz każdą konwersję w formacie [celsius]°C is [fahrenheit]°F, przy czym wartość w stopniach Celsjusza ma być dokładnie taka, jak została podana, a wartość w stopniach Fahrenheita — taka, jak obliczy ją Python. Nie zaokrąglaj ani nie formatuj liczb. Dwa wiersze generowane 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ę klasy Temperature o temperaturze 25°C
temp = None # Zastąp rzeczywistą instancją klasy Temperature
# TODO: Wypisz wartości w stopniach Celsjusza i Fahrenheita
# TODO: Użyj formatu: "25.0°C is 77.0°F"
# TODO: Ustaw temperaturę na 98.6°F
# TODO: Wypisz ponownie obie wartości, aby potwierdzić, że przeliczenie 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