Свойство на Python ()

Конструкцията свойство () връща атрибута свойство.

Синтаксисът на property()е:

 свойство (fget = Няма, fset = Няма, fdel = Няма, doc = Няма)

Препоръчително четене: Python @property: Как да го използвам и защо?

Параметри на свойството ()

Най property()отнема четири избираеми параметри:

  • fget (по избор) - Функция за получаване на стойността на атрибута. По подразбиране None.
  • fset (по избор) - Функция за задаване на стойността на атрибута. По подразбиране None.
  • fdel (по избор) - Функция за изтриване на стойността на атрибута. По подразбиране None.
  • doc (по избор) - низ, който съдържа документацията (docstring) за атрибута. По подразбиране None.

Върната стойност от свойството ()

property() връща атрибута на свойството от дадения getter, setter и deleter.

  • Ако не са дадени аргументи, property()връща атрибут на базово свойство, който не съдържа никакъв getter, setter или deleter.
  • Ако документът не е предоставен, property()взема документацията на функцията за получаване.

Пример 1: Създайте атрибут с getter, setter и Deleter

 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

Изход

 Получаване на име Името е: Адам Настройка на име на Джон Изтриване на име 

Тук _name се използва като частна променлива за съхраняване на името на Person.

Също така зададохме:

  • метод get_name()за получаване, за да получите името на човека,
  • метод set_name()за установяване, за да зададете името на човека,
  • метод del_name()на изтриване за изтриване на името на лицето.

Сега задаваме ново име на атрибут на свойството чрез извикване на property()метода.

Както е показано в програмата, препращане към p.nameвътрешни извиквания get_name()като getter, set_name()като setter и del_name()като deleter чрез отпечатания изход, присъстващ вътре в методите.

Пример 2: Използване на @property декоратор

Вместо да използвате property(), можете да използвате декоратора на Python, за @propertyда зададете getter, setter и deleter.

 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

Изход

 Получаване на име Името е: Адам Настройка на име на Джон Изтриване на име 

Тук, вместо да използваме property(), ние използвахме @propertyдекоратора.

Първо, ние уточняваме, че name()методът е и атрибут на Person. Това се прави, като се използва @propertyпреди методът за получаване, както е показано в програмата.

След това използваме името на атрибута, за да посочим задателя и изтриващия.

Това се прави, като се използва @name.setterза метода @name.deleterна задаване и за метода на изтриване.

Забележете, използвахме един и същ метод name()с различни дефиниции за дефиниране на getter, setter и deleter.

Сега, когато използваме p.name, той вътрешно извиква подходящия гетер, сетер и делетер, както е показано от отпечатания изход, присъстващ вътре в метода.

Интересни статии...