-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfactory.py
More file actions
92 lines (64 loc) · 3.1 KB
/
Copy pathfactory.py
File metadata and controls
92 lines (64 loc) · 3.1 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
82
83
84
85
86
87
88
89
90
91
92
from abc import ABC, abstractmethod
class Sword(ABC):
def __init__(self, sharpness, length, handle, creator):
self._sharpness = sharpness
self._length = length
self._handle = handle
self._creator = creator
@abstractmethod
def __str__(self, sword_name):
return "{}. Сделал: {}; Острота: {}; Длина: {}; Рукоять: {}".format(
sword_name, self._creator, self._sharpness, self._length, self._handle
)
class NorwegianSword(Sword):
def __init__(self, sharpness, length, creator):
handle = "Широкая рукоять"
super().__init__(sharpness, length, handle, creator)
def __str__(self):
return super().__str__("Норвежский меч")
class JapaneseSword(Sword):
def __init__(self, sharpness, length, creator):
handle = "Тонкая рукоять"
super().__init__(sharpness, length, handle, creator)
def __str__(self):
return super().__str__("Катана")
class Blacksmith(ABC):
def __init__(self, name, clothes):
self._name = name
self._clothes = clothes
@abstractmethod
def __str__(self):
pass
@abstractmethod
def makeSword(self):
pass
class NorwegianBlacksmith(Blacksmith):
def __init__(self, name):
clothes = "Старая рубаха"
super().__init__(name, clothes)
def __str__(self):
return "Норвежский кузнец"
def makeSword(self):
self.sword = NorwegianSword("Немного острый", "Короткий", self.__str__())
return self.sword
class JapaneseBlacksmith(Blacksmith):
def __init__(self, name):
clothes = "Аккуратный белый халат"
super().__init__(name, clothes)
def __str__(self):
return "Японский кузнец"
def makeSword(self):
self.sword = JapaneseSword("Острый", "Длинный", self.__str__())
return self.sword
# Теперь, допустим, какой-нибудь заказчик приходит к норвежскому и японскому кузнецу и говорит обоим сделать меч.
# ВАЖНО: заказчик не выбирает, какой меч сделает тот или иной кузнец, и никак повлиять на это не может.
# Вместо этого заказчик просто дает задание кузнецу сделать меч и потом получает этот меч.
norw_bsm = NorwegianBlacksmith("Сигурд")
norw_sword = norw_bsm.makeSword()
print(norw_sword)
japan_bsm = JapaneseBlacksmith("Харуто")
japan_sword = japan_bsm.makeSword()
print(japan_sword)
# output:
# Норвежский меч. Сделал: Норвежский кузнец; Острота: Немного острый; Длина: Короткий; Рукоять: Широкая рукоять
# Катана. Сделал: Японский кузнец; Острота: Острый; Длина: Длинный; Рукоять: Тонкая рукоять