Skip to content

Commit 9e3b0c5

Browse files
committed
exemplos de classes abstratas
1 parent 6fe7c8c commit 9e3b0c5

4 files changed

Lines changed: 119 additions & 0 deletions

File tree

caes/cao.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
# coding: utf-8
2+
13
class Mamifero(object):
24
"""vertebrados dotados de glândulas mamárias"""
35

caes/cao_abc.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# coding: utf-8
2+
3+
import abc
4+
5+
class CaoBase(object):
6+
__metaclass__ = abc.ABCMeta
7+
8+
qt_patas = 4
9+
carnivoro = True
10+
nervoso = False
11+
12+
def __init__(self, nome):
13+
self.nome = nome
14+
15+
@abc.abstractmethod
16+
def latir(self, vezes=1):
17+
'''exibir latido na saída padrão'''
18+
19+
def detectar_intruso(self):
20+
self.latir()
21+
# mais alguma ação...
22+
23+
def __str__(self):
24+
return self.nome
25+
26+
def __repr__(self):
27+
return 'Cao(%r)' % self.nome
28+
29+
def __eq__(self, outro):
30+
return (isinstance(outro, Cao) and
31+
self.__dict__ == outro.__dict__)
32+
33+
class Cao(CaoBase):
34+
35+
def latir(self, vezes=1):
36+
# quando nervoso, late o dobro
37+
vezes = vezes + (self.nervoso * vezes)
38+
print(self.nome + ':' + ' Au!' * vezes)
39+
40+

caes/cao_abc3.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
"""
2+
Somente Python 3!
3+
"""
4+
5+
import abc
6+
7+
class CaoBase(metaclass=abc.ABCMeta):
8+
__metaclass__ = abc.ABCMeta
9+
10+
qt_patas = 4
11+
carnivoro = True
12+
nervoso = False
13+
14+
def __init__(self, nome):
15+
self.nome = nome
16+
17+
@abc.abstractmethod
18+
def latir(self, vezes=1):
19+
'''exibir latido na saída padrão'''
20+
21+
def detectar_intruso(self):
22+
self.latir()
23+
# mais alguma ação...
24+
25+
def __str__(self):
26+
return self.nome
27+
28+
def __repr__(self):
29+
return 'Cao(%r)' % self.nome
30+
31+
def __eq__(self, outro):
32+
return (isinstance(outro, Cao) and
33+
self.__dict__ == outro.__dict__)
34+
35+
class Cao(CaoBase):
36+
37+
def latir(self, vezes=1):
38+
# quando nervoso, late o dobro
39+
vezes = vezes + (self.nervoso * vezes)
40+
print(self.nome + ':' + ' Au!' * vezes)
41+
42+

caes/cao_abstrato_classico.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# coding: utf-8
2+
3+
class CaoBase(object):
4+
qt_patas = 4
5+
carnivoro = True
6+
nervoso = False
7+
8+
def __init__(self, nome):
9+
self.nome = nome
10+
11+
def latir(self, vezes=1):
12+
raise NotImplementedError('responsabilidade da sub-classe')
13+
14+
def detectar_intruso(self):
15+
self.latir()
16+
# mais alguma ação...
17+
18+
def __str__(self):
19+
return self.nome
20+
21+
def __repr__(self):
22+
return 'Cao(%r)' % self.nome
23+
24+
def __eq__(self, outro):
25+
return (isinstance(outro, Cao) and
26+
self.__dict__ == outro.__dict__)
27+
28+
class Cao(CaoBase):
29+
30+
def latir(self, vezes=1):
31+
# quando nervoso, late o dobro
32+
vezes = vezes + (self.nervoso * vezes)
33+
print(self.nome + ':' + ' Au!' * vezes)
34+
35+

0 commit comments

Comments
 (0)