-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathclass_UserDict.py
More file actions
81 lines (60 loc) · 2.37 KB
/
class_UserDict.py
File metadata and controls
81 lines (60 loc) · 2.37 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
73
74
75
76
77
78
79
80
81
'''
Всі ці класи поводяться точно як вбудовані контейнери з тією лише відмінністю, що самі дані лежать у полі data у цих класів і ви можете використовувати це поле на свій розсуд.
UserDict — це клас, що міститься в модулі collections і слугує обгорткою навколо словника. Він дозволяє легше створювати власні класи словників, модифікуючи або додаючи нову поведінку до стандартних методів словника.
'''
from collections import UserDict
class MyDictionary(UserDict):
# Приклад додавання нового методу
def add_key(self, key, value):
self.data[key] = value
# Створення екземпляра власного класу
my_dict = MyDictionary({'a': 1, 'b': 2})
my_dict.add_key('c', 3)
print(my_dict)
# {'a': 1, 'b': 2, 'c': 3}
# =====================================
from collections import UserDict
contacts = [
{
"name": "Allen Raymond",
"email": "nulla.ante@vestibul.co.uk",
"phone": "(992) 914-3792",
"favorite": False,
},
{
"name": "Chaim Lewis",
"email": "dui.in@egetlacus.ca",
"phone": "(294) 840-6685",
"favorite": False,
},
{
"name": "Kennedy Lane",
"email": "mattis.Cras@nonenimMauris.net",
"phone": "(542) 451-7038",
"favorite": True,
}
]
class Customer(UserDict):
def phone_info(self):
return f"{self.get('name')}: {self.get('phone')}"
def email_info(self):
return f"{self.get('name')}: {self.get('email')}"
if __name__ == "__main__":
customers = [Customer(el) for el in contacts]
print("---------------------------")
for customer in customers:
print(customer.phone_info())
print("---------------------------")
for customer in customers:
print(customer.email_info())
'''
{'a': 1, 'b': 2, 'c': 3}
---------------------------
Allen Raymond: (992) 914-3792
Chaim Lewis: (294) 840-6685
Kennedy Lane: (542) 451-7038
---------------------------
Allen Raymond: nulla.ante@vestibul.co.uk
Chaim Lewis: dui.in@egetlacus.ca
Kennedy Lane: mattis.Cras@nonenimMauris.net
'''