Konstrukcja property () zwraca atrybut property.
Składnia property()
to:
właściwość (fget = None, fset = None, fdel = None, doc = None)
Zalecana lektura: Python @property: jak go używać i dlaczego?
property () Parametry
Przyjmuje property()
cztery opcjonalne parametry:
- fget (opcjonalne) - Funkcja do pobierania wartości atrybutu. Domyślnie
None
. - fset (opcjonalnie) - funkcja służąca do ustawiania wartości atrybutu. Domyślnie
None
. - fdel (opcjonalne) - Funkcja do usuwania wartości atrybutu. Domyślnie
None
. - doc (opcjonalny) - ciąg zawierający dokumentację (ciąg dokumentów) dla atrybutu. Domyślnie
None
.
Wartość zwracana z właściwości ()
property()
zwraca atrybut property z podanej metody pobierającej, ustawiającej i usuwającej.
- Jeśli nie podano żadnych argumentów,
property()
zwraca podstawowy atrybut właściwości, który nie zawiera żadnych funkcji pobierających, ustawiających ani usuwających. - Jeśli doc nie jest podany,
property()
pobiera dokumentację funkcji pobierającej.
Przykład 1: Tworzenie atrybutu za pomocą metody pobierającej, ustawiającej i usuwającej
class Person: def __init__(self, name): self._name = name def get_name(self): print('Getting name') return self._name def set_name(self, value): print('Setting name to ' + value) self._name = value def del_name(self): print('Deleting name') del self._name # Set property to use get_name, set_name # and del_name methods name = property(get_name, set_name, del_name, 'Name property') p = Person('Adam') print(p.name) p.name = 'John' del p.name
Wynik
Pobieranie imienia Nazywam się: Adam Nadaję imię Jankowi Usuwanie imienia
Tutaj _name jest używana jako zmienna prywatna do przechowywania nazwiska osoby.
Ustawiliśmy również:
- metoda
get_name()
pobierania imienia i nazwiska osoby, - metoda setera
set_name()
do ustawienia imienia osoby, - metoda
del_name()
usuwania nazwiska osoby.
Teraz ustawiamy nową nazwę atrybutu właściwości, wywołując property()
metodę.
Jak pokazano w programie, odwoływanie się do p.name
wewnętrznych wywołań get_name()
jako getter, set_name()
setter i del_name()
deleter poprzez wydrukowane wyjście obecne w metodach.
Przykład 2: Korzystanie z dekoratora @property
Zamiast property()
używać dekoratora Pythona, możesz @property
przypisać metody pobierające, ustawiające i usuwające.
class Person: def __init__(self, name): self._name = name @property def name(self): print('Getting name') return self._name @name.setter def name(self, value): print('Setting name to ' + value) self._name = value @name.deleter def name(self): print('Deleting name') del self._name p = Person('Adam') print('The name is:', p.name) p.name = 'John' del p.name
Wynik
Pobieranie imienia Nazywam się: Adam Nadaję imię Jankowi Usuwanie imienia
Tutaj, zamiast używać property()
, użyliśmy @property
dekoratora.
Najpierw określamy, że name()
metoda jest również atrybutem osoby. Odbywa się to za pomocą @property
metody pobierającej przed, jak pokazano w programie.
Następnie używamy nazwy atrybutu do określenia metody ustawiającej i usuwającej.
Odbywa się to za pomocą @name.setter
metody ustawiającej i @name.deleter
metody deleter.
Zauważ, że użyliśmy tej samej metody name()
z różnymi definicjami do definiowania metody pobierającej, ustawiającej i usuwającej.
Teraz, za każdym razem, gdy używamy p.name
, wewnętrznie wywołuje odpowiedni getter, setter i deleter, jak pokazano na wydrukowanym wyjściu obecnym wewnątrz metody.