Skip to content

Instantly share code, notes, and snippets.

@huogerac
Created September 28, 2012 22:07
Show Gist options
  • Save huogerac/3802315 to your computer and use it in GitHub Desktop.
Save huogerac/3802315 to your computer and use it in GitHub Desktop.
Exercício 1 - Objetos Pythonicos
# coding: utf-8
from __future__ import division
"""
Código inicial usado na Lista de Exercícios 1 do curso
"Objetos Pythonicos" de Luciano Ramalho, Oficinas Turing.
"""
class Contador(object):
def __init__(self):
self.ocorrencias = {}
def incrementar(self, item):
qtd = self.ocorrencias.get(item, 0) + 1
self.ocorrencias[item] = qtd
def contagem(self, item):
return self.ocorrencias[item]
class ContadorAmigavel(Contador):
def contagem(self, item):
try:
occurs = Contador.contagem(self, item)
except KeyError:
occurs = 0
return occurs
class ContadorTotalizador(Contador):
def __init__(self):
Contador.__init__(self)
self.total = 0
def incrementar(self, item):
Contador.incrementar(self, item)
self.total = sum( self.ocorrencias.values() )
def porcentagem(self, item):
#TODO: Se tirar o try, retorna KeyError:! descobrir como
#eliminar este codigo duplicado sem dar erro
try:
occurs = Contador.contagem(self, item)
except KeyError:
return 0
return (self.ocorrencias[item] / self.total) * 100
class ContadorTotalizadorAmigavel(ContadorAmigavel, ContadorTotalizador):
"""
EXTRA
Na implementacao atual não importa a ordem da herança multipla.
Mas em teoria, o ContadorAmigavel deveria ser primeiro de modo
que seja chamado o método contagem com tratamento de erro
em vez do contagem do Contador que não tem tratamento de erro.
Acredito que o TODO da classe ContadorTotalizador deveria ser
resolvido
"""
pass
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment