Menu
Coddy logo textTech

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

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

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

Wynik:

30

Zwróć 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 = 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 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 = 15

Wynik:

15

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

challenge icon

Wyzwanie

Średni

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

Spró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ś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