Bom, aqui vai uma dúvida meio boba mas, talvez, relevante:
- Durante a implementação do código do exercício eu tentei declarar os métodos do template como privados já que, a meu ver, serão métodos utilizados apenas pela classe em si e implementados por suas filhas sem a necessidade de serem públicos.
class Imposto_condicional(object):
#importando do módulo abc o ABCMeta e o @abstractmethod
from abc import ABCMeta, abstractmethod
#Fazendo a classe uma classe abstrata
__metaclass__ = ABCMeta
def calcula(self, orcamento):
if (self.__condicao(orcamento)):
return __self.imposto_maior(orcamento)
else:
return self.__imposto_menor(orcamento)
@abstractmethod
def __condicao(self, orcamento): pass
@abstractmethod
def __imposto_maior(self, orcamento): pass
@abstractmethod
def __imposto_menor(self, orcamento): pass
Logo após implementei os métodos nas classes filhas como privados também:
class IKCV(Imposto_condicional):
""" Classe de imposto que herda do template Imposto_condicional """
def __condicao(self, orcamento):
return orcamento.valor > 1000
def __imposto_maior(self, orcamento):
return orcamento.valor * 0.1
def __imposto_menor(self, orcamento):
return orcamento.valor * 0.06
O problema dessa abordagem é que mesmo a lógica estando correta o resultado sempre era None, apenas quando eu mudei os métodos para públicos que pude obter o resultado esperado. Seria isso um característica do python que impede que se utilize métodos privados em classes abstratas?
Att,