Menu
Coddy logo textTech

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 ** 2

Zwróć 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.53975

Zwróć 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 gettera

Wynik:

10

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

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