-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathclass_property.py
More file actions
72 lines (47 loc) · 3.13 KB
/
class_property.py
File metadata and controls
72 lines (47 loc) · 3.13 KB
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
'''
Гетери (від англ. get - отримувати) - це методи, які дозволяють отримати значення поля. Вони використовуються, коли доступ до поля потребує якоїсь додаткової обробки або коли безпосередній доступ до поля не бажаний з міркувань інкапсуляції. Наприклад, якщо потрібно завжди повертати значення поля у вигляді рядка, навіть якщо воно зберігається як число.
Сетери (від англ. set - встановлювати) - це методи, які дозволяють встановити значення поля. Вони найчастіше використовуються для валідації даних, які намагаються присвоїти полю. Наприклад, якщо ми маємо поле, який повинно приймати значення лише додатні числа, можна в сетері додати перевірку, яка буде викидати виняток або повертати помилку, якщо намагатися присвоїти йому від'ємне число.
Вбудований декоратор @property в Python дозволяє легко створювати гетери. Використання цього декоратора робить метод класу доступним як поле, тобто його можна буде викликати без дужок. Це робить інтерфейс класу більш чистим та інтуїтивно зрозумілим. Для створення сетера для того ж поля, що і гетер, використовується декоратор @property.setter, який застосовується до методу з тим же ім'ям, що і властивість.
'''
# class Person:
# def __init__(self, name, age):
# self.__name = name
# self.__age = age
# def get_name(self):
# return self.__name
# def set_name(self, name):
# self.__name = name
# person = Person('Oleh', '23')
# print(person.get_name())
# person.set_name('Test')
# print(person.get_name())
# =====================================
class Person:
def __init__(self, name, age):
self.__name = name
self.__age = age
def get_name(self):
return self.__name
def set_name(self, name):
self.__name = name
name = property(get_name, set_name)
person = Person('Oleh', '23')
print(person.name)
person.name = 'Test'
print(person.name)
#=======================================
class Person:
def __init__(self, name, age):
self.__name = name
self.__age = age
@property
def name(self):
return self.__name
@name.setter
def name(self, name):
self.__name = name
person = Person('Oleh', '23')
print(person.name)
person.name = 'Test'
print(person.name)
print(person.__dict__)