Właściwość Pythona ()

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.namewewnę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 @propertyprzypisać 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 @propertydekoratora.

Najpierw określamy, że name()metoda jest również atrybutem osoby. Odbywa się to za pomocą @propertymetody 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.settermetody ustawiającej i @name.deletermetody 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.

Interesujące artykuły...