2
respostas

Atributo privado na classe mãe

Bom dia

Fazendo um laboratório aqui com as classes utilizadas nas aulas, percebi que após utilizar o super().init(nome, ano) nas classes Filme e Serie, eu poderia voltar a proteger corretamente os atributos da classe Programa com 2 underscores (como __nome por exemplo).

Como isso não foi comentado em aula e não sei o que vem pela frente, resolvi colocar esse comentário, pois acho que ficaria mais elegante voltar a utilzar o private do jeito que a linguagem pede. O raciocício está correto? Daria pra seguir nessa linha então? Abraços.

2 respostas

Na verdade, para que você possa utilizar as variaveis da classe mãe, como self._nome, seria necessário adicionar o self dentro do init >> super().__init__(self, nome, ano)

Na prática de mercado, geralmente os devs são divididos em 2 grupos. O dev que faz o código, por exemplo de importação com tratativas, etc., e os devs que montam as classes e funções pro código de importação funcionar.

Logo, se você for o dev criador de funções e classes, não é muito comum você usar private, pode ser mais bonito, mas dificulta a vida do dev que vai "juntar tudo".

Vinicius, agora que você comentou, percebi que quem na verdade ajudou a possibilitar novamente a proteger os atributos foi o decorator na classe mãe em @nome.setter def nome(self, novo_nome): self._nome = novonome.title()

Logo na subclasse eu conseguiria utilizar self.nome = nome e iria funcionar se precisasse, mesmo com o atributo nome estando privado na classe mãe. Desconsidere a questão do super(). É que como havia sido dado como solução em aulas anteriores utilizar um único underscore para "fingir" que é privado, eu não gostei muito, mas aceitei. Mas no ponto em que o código está agora no curso, já daria pra voltar a proteger de fato com 2 underscores. Obrigdo, Abraço.