1
resposta

Duvida de usar Herança

Prezados(as)

Estou fazendo um projeto pessoal e meu surgiu uma duvida

criei uma classe chamada autor com 3 atributos (nome, nacionalidade, ano_nascimento), ai usando a herança, criei uma outra classe chamada livro com 4 atributos(titulo, ano_publicacao, genero, disponivel)

Só que eu quero usar somente o atributo nome da classe autor que seira o nome, na classe livro Só que quando eu importo a classe e chamo através do super() vem com todos atributos ai da erro na hora de imprimir

Se alguem conseguir me ajudar, ajudaria e muito.

Segue o codigo abaixo:

Att.

Felipe Bazan

class Autor:
   def __init__(self, nome, nacionalidade, data_nascimento):
      self.nome=nome
      self.nacionalidade= nacionalidade
      self.data_nascimento=data_nascimento
from autor import Autor


class Livro(Autor):
    def __init__ (self, nome, titulo, ano_publicacao, genero, disponivel):
        super().__init__(nome)
        self.titulo=titulo
        self.ano_publicacao= ano_publicacao
        self.genero= genero
        self.disponivel=True

    def __str__ (self):
        return f'O livro {self.titulo}, foi publicado no ano {self.ano_publicacao}, seu genero é {self.genero}, do autor{self.nome}'


Livro1= Livro('Felipe', 'Harry Potter', 1995, 'Aventura', True)
1 resposta

Oii Felipe, espero que esteja bem.

Vou tentar te dar uma luz do que você pode fazer.

Você poderia usar composição ao invés de herança, já que um livro "tem um" autor, e não "é um" autor.

Algo nessa linha:

class Autor:
    def __init__(self, nome, nacionalidade, data_nascimento):
        self.nome = nome
        self.nacionalidade = nacionalidade
        self.data_nascimento = data_nascimento

class Livro:
    def __init__(self, autor, titulo, ano_publicacao, genero, disponivel):
        self.autor = autor
        self.titulo = titulo
        self.ano_publicacao = ano_publicacao
        self.genero = genero
        self.disponivel = disponivel

    def __str__(self):
        return f'O livro {self.titulo}, foi publicado no ano {self.ano_publicacao}, seu gênero é {self.genero}, do autor {self.autor.nome}'

# Criando uma instância de Autor
autor1 = Autor('Felipe', 'Brasileiro', '1980-01-01')

# Criando uma instância de Livro com o autor
livro1 = Livro(autor1, 'Harry Potter', 1995, 'Aventura', True)

print(livro1)

Assim, você cria uma instância da classe Autor e passa essa instância como um argumento ao criar uma instância da classe Livro. Desse jeito, você pode acessar o atributo nome do autor através de self.autor.nome na classe Livro.

Você pode ter que fazer mudanças no seu código, claro, pois essa é uma ideia. Lembrando que você pode participar o discord e criar discussões como essa lá, muitas pessoas podem te ajudar a clarear as ideias.

Um abraço e bons estudos.