1
resposta

Herança multipla, compartilhando métodos e atributos

Olá, eu fiz um código onde tenho uma classe mãe, duas classes filhas que herdam da classe mãe, e uma classe filha que herda das duas classes filhas da classe mãe, eu fiz a classe que herda das duas utilizar um atributo da classe filha 1, e um método da classe filha 2, porem quanto executo aparece este um erro.

class Mother:
    def __init__(self, nome, idade, funcao):
        self._nome = nome
        self._idade = idade
        self._funcao = funcao

    @property
    def atributo1(self):
        return self._nome

    @property
    def atributo2(self):
        return self._idade

    @atributo1.setter
    def atributo1(self, novo_valor):
        self._nome = novo_valor

    @atributo2.setter
    def atributo2(self, novo_valor):
        self._idade = novo_valor

    @property
    def atributo3(self):
        return self._funcao

    @atributo3.setter
    def atributo3(self, novo_atributo):
        self._funcao = novo_atributo

    def apresentar(self):
        return print(f'Olá sou {self._funcao}, mãe das classes filhas, minha função é {self._funcao}')

    def exibir(self):
        return print(f'Nome: {self._nome}, idade: {self._idade}')


# ----------------------------------------------------------------------------------]


class Daughter(Mother):
    def __init__(self, _nome, _idade, _funcao, cozinhar):
        super().__init__(_nome, _idade, _funcao)
        self._cozinhar = cozinhar

    @property
    def cozinhar(self):
        return self._cozinhar

    @cozinhar.setter
    def cozinhar(self, nova_comida):
        self._cozinhar = nova_comida

    def apresentar(self):
        return print(f'Olá sou {self._nome} filha da classe mãe, minha função é: {self._funcao}')

    def exibir(self):
        return print(f'Nome: {self._nome}, idade: {self._idade}, Função: {self._funcao}')

    def bom_dia(self):
        return print(f'Bom dia! meu nome é {self._nome}')

# ----------------------------------------------------------------------------------]


class Son(Mother):
    def __init__(self, _nome, _idade, _funcao, cacar):
        super().__init__(_nome, _idade, _funcao)
        self._cacar = cacar

    @property
    def cacar(self):
        return self._cacar

    @cacar.setter
    def cacar(self, nova_caca):
        self._cacar = nova_caca

    def apresentar(self):
        return print(f'Olá sou {self._nome} filho da classe mãe, minha função é: {self._funcao}')

    def exibir(self):
        return print(f'Nome: {self._nome}, idade: {self._idade}, Função: {self._funcao}, devo caçar um {self._cacar}')


# ----------------------------------------------------------------------------------]


class Children(Son, Daughter):

    def apresentar(self):
        return print(f'Olá sou {self._nome} filho do filho de Mother, aprendi com meu irmão a caçar, com minha irmã a dar bom dia! minha função é {self._funcao}, Eu estou aprendendo a caçar {self._cacar}')

    def exibir(self):
        return print(f'Nome: {self._nome}, idade: {self._idade}, Função: {self._funcao}')


# ----------------------------------------------------------------------------------]


joao = Mother('João', 43, 'Vasculhar')
joao.exibir()

maria = Daughter('Maria', 21, 'Cortar lenha', 'Miojo')
maria.exibir()
maria.atributo3 = 'Limpar a lareira'
maria.exibir()

marcio = Son('Marcio', 22, 'Caçar', 'Javali')
marcio.apresentar()
marcio.exibir()

diego = Children('Diego', 15, 'Vigiar', 'Cervo')
diego.bom_dia()

Saída: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Olá Julio,

Tente assim ;

class Children(Son,Daughter):
    def __init__(self,_nome,_idade,_funcao,cacar,cozinhar):
        Son.__init__(self,_nome,_idade,_funcao,cacar)
        Daughter.__init__(self,_nome,_idade,_funcao,cozinhar)

Referencias que podem ajudar: