Метод Python property() возвращает объект свойств класса и используется для создания свойства класса.
Синтаксис
|
1 |
property(fget=None, fset=None, fdel=None, doc=None) |
Параметры
Метод property() принимает четыре необязательных параметра:
- fget(необязательно) — эта функция предназначена для получения значения атрибута.
- fset(необязательно) — эта функция предназначена для установки значения атрибута.
- fdel(необязательно) — предназначена для удаления значения атрибута.
- doc(необязательно) — строка атрибута содержит документацию(docstring).
Возвращаемое значение
Функция property() возвращает атрибут свойства из заданных методов получения, установки и удаления.
Пример 1: как использовать функцию property()
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
class Student: def __init__(self, fname): self._fname = fname def getfname(self): print('Getting fname') return self._fname def setfname(self, value): print('Setting fname to ' + value) self._fname = value def delfname(self): print('Deleting fname') del self._fname fname = property(getfname, setfname, delfname, 'fname property') s = Student('Jane') print(s.fname) s.fname = 'Eleven' del s.fname |
Выход
|
1 2 3 4 |
Getting fname Jane Setting fname to Eleven Deleting fname |
Здесь _fname используется как приватная переменная для хранения имени студента.
Также устанавливаем:
- геттер-метод
getfname()для получения имени студента, - метод установки
setfname()для установки имени студента, - метод удаления
delname()для удаления имени студента.
Теперь мы устанавливаем новое имя атрибута свойства, вызывая метод property().
Как показано в программе, обращение к s.fname внутренне вызывает getfname() как геттер, setfname() как сеттер и delfname() как детерминатор через печатный вывод, присутствующий внутри методов.
Свойство Python с использованием декоратора @property
Декоратор @property позволяет нам легко определять свойства без ручного вызова функции property(). Однако прежде чем изучать декоратор @property, давайте разберемся, что такое декоратор.
Вместо использования метода property() вы можете использовать декоратор @property для назначения геттера, сеттера и удаления.
Пример 2
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
class Student: def __init__(self, fname): self._fname = fname @property def fname(self): print('Getting fname') return self._fname @fname.setter def fname(self, value): print('Setting fname to ' + value) self._fname = value @fname.deleter def fname(self): print('Deleting fname') del self._fname s = Student('Enola') print('The fname is:', s.fname) s.fname = 'Millie' del s.fname |
Выход
|
1 2 3 4 |
Getting fname The fname is: Enola Setting fname to Millie Deleting fname |
Свойство и атрибут в Python
Атрибуты класса уникальны для каждого класса. Каждый экземпляр класса будет иметь атрибут.
Пример 3
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# Declare a class class Person: # Class attribute count = 0 # Define a method def increase(self): Person.count += 1 # Create an Person # Class object p1 = Person() # Calling object's method p1.increase() # Print value of class attribute print(p1.count) p2 = Person() p2.increase() print(p2.count) print(Person.count) |
Выход
|
1 2 3 4 |
1 2 2 |
Пример 4: Python property() возвращает объект свойств класса
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# Declare a class class Person: # constructor def __init__(self, value): self._value = value # getting the values def getter(self): print('Getting value') return self._value # setting the values def setter(self, value): print('Setting value to ' + value) self._value = value # deleting the values def deleter(self): print('Deleting value') del self._value # create a properties value = property(getter, setter, deleter, ) x = Person('Oppenhimer!') print(x.value) x.value = 'Manhattan Project!' # deleting the value del x.value |
Выход
|
1 2 3 4 |
Getting value Oppenhimer! Setting value to Manhattan Project! Deleting value |
