Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

Mão na massa: refatorando uma função

Para esta questão usei o seguinte código:

class Musica:
    def __init__(self, nome, artista, duracao):
        self.nome = nome
        self.artista = artista
        self.duracao = duracao

    def __str__(self):
        return f"A música {self.nome} é do(a) {self.artista} e tem uma duração de {self.duracao}."


musica_ha_tempos = Musica("Há Tempos", "Legião Urbana", "04:52")

musica_sera = Musica("Será", "Legião Urbana", "02:55")

musica_resposta = Musica("Resposta", "Skank", "03:35")

print(musica_ha_tempos)
print(musica_sera)
print(musica_resposta)

Mas vi que na "Opinião do instrutor", estava de forma diferente com

  def __init__(self, nome=' ', artista=' ', duracao=0):

Qual seria a aplicação prática de se usar "self, nome=' ', artista=' ', duracao=0)"?

No Python, o tipo é definido automaticamente pelo valor atribuído, mas mesmo assim é preciso especificar explicitamente o tipo esperado em uma de uma variavel na classe?

1 resposta

Oi, Sérgio. Tudo bem?

Seu código ficou bem estruturado, principalmente na criação da classe Musica e no uso de self para armazenar os atributos de cada objeto. Sobre a sua dúvida, esses são valores padrão. Isso permite criar um objeto sem informar todos os argumentos. O Python usa esses valores quando nenhum argumento é passado.

Você também não precisa declarar previamente o tipo dos atributos. O Python é tipado dinamicamente, então nome pode receber uma str, por exemplo, sem uma declaração explícita, mas uma dica interessante para o futuro é usar anotações de tipo para deixar a intenção do código mais clara:


class Musica:
    def __init__(self, nome: str = '', artista: str = '', duracao: str = '00:00'):
        self.nome = nome
        self.artista = artista
        self.duracao = duracao

Nesse exemplo, : str indica o tipo esperado, mas não impede que outro tipo seja atribuído. Em quais situações você acha que esses valores padrão poderiam ser úteis em uma aplicação real?

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!