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








