Dúvida em herança

Bom dia.

Fiquei com dúvida na questão de herança. A herança não seria para reduzir repetição de código? Pois bem, no código abaixo que esta nos exemplos da Caelum, não vejo redução na repetição de código, pois temos que escrever novamente os atributos da classe base na subclasse no init e ainda usar o super().

    class Funcionario:
		def	__init__(self,	nome,	cpf,	salario):
			self._nome	=	nome
			self._cpf	=	cpf
			self._salario	=	salario

class Gerente(Funcionario):
		def	__init__(self,	nome,	cpf,	salario,	senha,	qtd_funcionarios):
			super().__init__(nome,	cpf,	salario)
			self._senha	=	senha
			self._qtd_funcionarios	=	qtd_funcionarios

Se eu tiver n subclasses herdando de funcionário e, depois tiver que acrescentar um atributo em funcionário, vou ter que inserir esse novo atributo em todas as subclasses manualmente.

Estou começando agora em Python. É isso mesmo ou estou entendo de forma errada esse conceito?

Não.

Leia este link para entender melhor.


Não tenho o contexto da apostila, mas até mesmo esse exemplo dá para questionar. Um gerente sempre é um funcionário? Ou é só um funcionário que em certo momento está atuando como gerente? Então “gerente” poderia ser um cargo/uma função que determinado funcionário tem em determinado momento (neste caso, seria um campo do Funcionario indicando a função atual deste, por exemplo), e não uma subclasse de Funcionario. Nem sempre você precisa de herança, mesmo quando ache que precisa (mas como já disse, não sei qual o contexto da apostila, pode ser que no caso ali faça sentido).

Mas enfim, herança não é para evitar repetição de código. Na verdade, se fizer mal feito, pode até acabar escrevendo mais código ainda…

Recomendo também a leitura deste link que dá algumas luzes sobre esse exemplo específico de funcionário x gerente.

1 curtida

No caso do exemplo, se eu retirar o init da classe gerente, não é necessário o super?

Vou ler o material do link.