-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathclass_polimorfism.py
87 lines (61 loc) · 2.66 KB
/
class_polimorfism.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
'''
Поліморфізм - це один із ключових концептів ООП, який дозволяє об'єктам мати різні форми або поведінку, базуючись на їх типах.
У контексті ООП, це відноситься до здатності різних класів використовувати методи з однаковою назвою, але з різною реалізацією. Це дозволяє використовувати один інтерфейс для різних типів даних.
'''
class Animal:
def __init__(self, nickname: str, age: int):
self.nickname = nickname
self.age = age
def make_sound(self):
pass
class Cat(Animal):
def make_sound(self):
return "Meow"
class Dog(Animal):
def make_sound(self):
return "Woof"
def animal_sounds(animals):
for animal in animals:
print(animal.make_sound())
animals = [Cat("Simon", 4), Dog("Rex", 5)]
animal_sounds(animals)
'''
Тут make_sound - це метод, що використовується у кожному класі, але його реалізація різна для Cat та Dog. Це дозволяє нам викликати make_sound на екземплярі Animal, не знаючи точно, чи це Cat, Dog, чи інший підклас Animal. Ми створили функцію animal_sounds яка приймає список тварин і в принципі не важливо якого вони типу, головне, щоб вони реалізували метод make_sound:
Отже поліморфізм дозволяє обробляти об'єкти різних класів, які є похідними від одного базового класу, через спільний інтерфейс (тобто через однакові методи).
'''
class Duck:
def quack(self):
print("Quack, quack!")
class Person:
def quack(self):
print("I'm Quacking Like a Duck!")
def make_it_quack(duck):
duck.quack()
duck = Duck()
person = Person()
make_it_quack(duck)
make_it_quack(person)
# Quack, quack!
# I'm Quacking Like a Duck!
class Dog:
def speak(self) -> str:
return "Woof"
class Cat:
def speak(self) -> str:
return "Meow"
class Robot:
def speak(self) -> str:
return "Beep boop"
def make_it_speak(speaker) -> None:
print(speaker.speak())
dog = Dog()
cat = Cat()
robot = Robot()
make_it_speak(dog) # Виведе: Woof
make_it_speak(cat) # Виведе: Meow
make_it_speak(robot) # Виведе: Beep boop
'''
Woof
Meow
Beep boop
'''