1
resposta

Mão na massa : herança e modularização

banco.py

class Banco:
    def __init__(self, nome, endereco):
        self._nome = nome
        self._endereco = endereco

agencia.py

from banco import Banco

class Agencia(Banco):
    def __init__(self, nome, endereco, numero):
        super().__init__(nome, endereco)
        self._numero = numero
1 resposta

Olá, Luiz Fernando. Como vai?

Mais uma excelente entrega na sua jornada de Orientação a Objetos com Python! A modularização (separar as classes em arquivos diferentes) e o uso da herança são práticas fundamentais para construir sistemas organizados, fáceis de dar manutenção e que escalam bem no mercado real.

Seu código está estruturado de forma impecável:

  • Modularização Correta: O arquivo agencia.py está importando a classe Banco do arquivo banco.py com a sintaxe perfeita (from banco import Banco).
  • Uso do super().__init__(): Você utilizou a melhor prática de herança ao invocar o construtor da classe mãe para inicializar os atributos protegidos _nome e _endereco, deixando para a classe Agencia apenas a responsabilidade de inicializar o seu próprio atributo específico, que é o _numero.
  • Encapsulamento: O uso do underline (_) antes dos nomes dos atributos indica para outros desenvolvedores que esses dados são protegidos, uma convenção muito forte no ecossistema Python.

Para te ajudar a compreender visualmente como o Python organiza essa relação de herança e herda a estrutura dos atributos entre as duas classes em arquivos separados, veja o esquema abaixo:

Uma dica de ouro para o próximo passo:

Agora que você estruturou a herança, o próximo passo natural desse exercício costuma ser a criação de um método de exibição de dados (como o __str__ que você utilizou com sucesso no desafio de Veículos).

Lembre-se de que, na classe Agencia, você pode reaproveitar os dados da classe mãe fazendo com que a agência exiba o nome do banco ao qual pertence. Veja um exemplo prático de como expandir o seu arquivo agencia.py:

from banco import Banco

class Agencia(Banco):
    def __init__(self, nome, endereco, numero):
        super().__init__(nome, endereco)
        self._numero = numero

    def __str__(self):
        # Acessando os atributos herdados da classe Banco
        return f"Banco: {self._nome} | Agência Número: {self._numero} | Endereço: {self._endereco}"

O design das suas classes está excelente e demonstra que o conceito de reaproveitamento de código e divisão de responsabilidades está super consolidado na sua mente. Parabéns pelo projeto!

Espero que possa ter lhe ajudado!