-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcomposite.py
102 lines (70 loc) · 1.94 KB
/
composite.py
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
93
94
95
96
97
98
99
100
101
102
from abc import ABC, abstractmethod
from typing import List
TAB = ' '
class World(ABC):
def __init__(self, name):
self.name = name
self.children: List[World] = []
def add(self, object):
self.children.append(object)
def remove(self, object):
self.children.remove(object)
@abstractmethod
def show(self):
pass
class Being(World):
def __init__(self, name):
super().__init__(name)
def show(self):
print(f'Being Composite {self.name}')
for child in self.children:
child.show()
class Animal(World):
def __init__(self, name):
super().__init__(name)
def show(self):
print(f'{TAB}Animal Composite {self.name}')
for child in self.children:
child.show()
class Human(World):
def __init__(self, name):
super().__init__(name)
def show(self):
print(f'{TAB}Human Composite {self.name}')
for child in self.children:
child.show()
class Cat(World):
def __init__(self, name):
super().__init__(name)
def show(self):
print(f'{TAB*2}Cat Leaf {self.name}')
class Dog(World):
def __init__(self, name):
super().__init__(name)
def show(self):
print(f'{TAB*2}Dog Leaf {self.name}')
class Male(World):
def __init__(self, name):
super().__init__(name)
def show(self):
print(f'{TAB*2}Male Leaf {self.name}')
class Female(World):
def __init__(self, name):
super().__init__(name)
def show(self):
print(f'{TAB*2}Female Leaf {self.name}')
if __name__ == '__main__':
cat = Cat('Missy')
dog = Dog('Jerry')
animals = Animal('animals')
animals.add(cat)
animals.add(dog)
male = Male('Mohammad')
female = Female('Sara')
humans = Human('humans')
humans.add(male)
humans.add(female)
being = Being('all')
being.add(animals)
being.add(humans)
being.show()