Сетери, гетери і делетери
OK, ми захистили поле від доступу давши йому відповідне ім'я зі знаком підкреслення на початку, домовились що таке поле не чіпатимемо. Але як же отримати його значення? Зробити це можна реалізувавши відповідний метод:
>>> class Person:
... def __init__(self, age):
... self.__age = age
... def get_age(self):
... return self.__age
...
>>> p = Person(35)
>>> p.get_age()
35
>>>
Так само за допомогою методів можна реалізувати присвоєння значень прихованим атрибутам класа:
>>> class Person:
... def __init__(self, age):
... self.set_age(age)
... def get_age(self):
... return self.__age
... def set_age(self, age):
... if age > 0:
... self.__age = age
...
>>> p = Person(35)
>>> p.get_age()
35
>>> p.set_age(-35)
>>> p.get_age()
35
>>>
В об'єктно-орієнтованому програмуванні прийнято
імена методів для вилучення даних починати зі слова get
("взяти"),
а імена методів, в яких полям присвоюються певні значення — зі слова set
("встановити2).
А самі методи часто називають відповідно сетерами і гетерами.
Існують також делетери — методи для видалення (delete
) полів класа.
У вищенаведеному прикладі get_age
— це гетер, а set_age
— сетер.
Зауважте що для встановлення значення для прихованого атрибута в конструкторі ми скористались сетером.