Конструкцията свойство () връща атрибута свойство.
Синтаксисът на 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
, той вътрешно извиква подходящия гетер, сетер и делетер, както е показано от отпечатания изход, присъстващ вътре в метода.