Menu
CoddyTech

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._age

Użyj właściwości jak zwykłego atrybutu:

person = Person("Alice", 30)
print(person.age)

Wynik:

30

Zauważ, ż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 = value

Teraz 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ć ujemny

Wynik:

31

Utwó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 = 15

Wynik:

15

Najważ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.

challenge icon

Wyzwanie

Średni

Uzupeł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°F

Spró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śniej
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Python online