Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Chamar a função "set_nome" no init

Olá, pensando que a verificação do nome pode ficar bem grande e/ou que alguém pode setar o nome com padrões diferente estou tentando já o init chamar a funçao set_nome. É possível isso? Fiz o seguinte código. Não deu erro, mas o nome foi setado como None:

class Filme:
  def __init__(self,nome,ano,duracao, likes):
    self.__nome = self.set_nome(nome)
    self.ano = ano
    self.duracao = duracao
    self.__likes = likes

  @property
  def likes(self):
    return self.__likes

  def dar_likes(self):
    self.__likes += 1

  @property
  def nome(self):
    return self.__nome

  #@nome.setter
  def set_nome(self, nome):
    self.__nome = nome.title()

vingadores = Filme("vingadores - Guerra infinta", 2017, 160, 0)

print(f"Nome do filme: {vingadores.nome} - Ano de produção: {vingadores.ano}")

saída:

Nome do filme: None - Ano de produção: 2017

1 resposta
solução!

então, o seu problema ta nessa linha do construtor:

def __init__(self,nome,ano,duracao, likes):
    self.__nome = self.set_nome(nome)

o método set_nome não retorna nada, ele define internamente a variável.

  def set_nome(self, nome):
      self.__nome = nome.title()

só que você tá atribuindo o retorno desse método a variável __nome, e como eu disse, não há retorno, então None.

O que você quer é sim possível, basta fazer assim:

def __init__(self,nome,ano,duracao, likes):
    self.__nome = nome
    self.set_nome(nome)

ou simplesmente remover a primeira linha:

def __init__(self,nome,ano,duracao, likes):
    self.set_nome(nome)

Pois o método irá criar o atributo nome da classe, já com letra maiúscula.