-
Notifications
You must be signed in to change notification settings - Fork 0
/
ex_polimorfismo1.py
70 lines (55 loc) · 1.96 KB
/
ex_polimorfismo1.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
class Pessoa:
@staticmethod
def _lista_pessoas(pessoas):
media = 0
for p in pessoas:
print(p.idade)
media += p.idade
print(f'soma de idades: {media}')
print(f'quantidade pessoas: {len(pessoas)}')
return media / len(pessoas)
def __init__(self, nome, idade):
self.nome = nome
self.idade = idade
def __repr__(self):
return 'Nome: {}, Idade: {}'.format(self.nome, self.idade)
@staticmethod
def compara_idades(p1, p2):
"""
Retorna verdadeiro se p1 for mais novo que p2.
"""
if isinstance(p1, Pessoa) and isinstance(p2, Pessoa):
return p1.idade <= p2.idade
else:
print('Os objetos precisam ser derivados da classe pessoa')
class Aluno(Pessoa):
def __init__(self, nome, idade, matricula):
Pessoa.__init__(self, nome, idade)
self.matricula = matricula
def __repr__(self):
s = Pessoa.__repr__(self)
s += '\nMatricula: {}'.format(self.matricula)
return s
class Professor(Pessoa):
def __init__(self, nome, idade, departamento):
Pessoa.__init__(self, nome, idade)
self.departamento = departamento
def __repr__(self):
s = Pessoa.__repr__(self)
s += '\nDepartamento: {}'.format(self.departamento)
return s
if __name__ == "__main__":
#Pessoa p = Aluno('joaquim', 18, 123) # forma 1: incompativel com Python
p = Pessoa('joao', 25)
a = Aluno('hugo', 20, 111)
prof = Professor('santos', 40, 'ECT')
p1 = Pessoa('maria', 28)
a1 = Aluno(p1.nome, p1.idade, 222) # forma 2: typecasting (?)
print(Pessoa.compara_idades(prof, a)) # forma 3: método que recebe objetos derivados de pessoa
for ps in [p, a, prof]:
print(ps) # forma 4: sobrecarga de operadores
lista = list()
lista.append(p)
lista.append(a)
lista.append(prof)
print(f'media de idades {a1._lista_pessoas(lista)}')