1
resposta

name 'Serie' is not defined

Olá Eu estou com o código exatamente como o do professor, nao copiei aqui a Class Filme pois com ela está tudo e ocuparia muito espaço. Procurei por varios lugares pra ver se era algum problema na versão do python ja que a do professor usa na Aula é a 3.6, se eu não estiver errado, pelo fato do vídeo ser um pouco antigo e eu uso a 3.9.6 porém não consegui achar nada sobre isso.Enfim segue abaixo o que tem sido minha dor de cabeça essa noite

Obs: O problema de identação está sendo aqui mesmo, pois é a primeira vez utilizando o fórum e não sei muito bem como funciona o editor, perdão

class Filme:
*
*
*
class Serie:
        def init(self, nome, ano, temporadas):
        self.nome = nome.title()
        self.ano = ano
        self.temporadas = temporadas
        self.likes = 0

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

def darlike(self):
    self.likes += 1

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

@nome.setter
def nome(self, novonome):
    self.nome = novonome.tittle()

atlanta = Serie('Atlanta', 2018, 2)

O pycharm ja me mostra que a class Serie não existe e pede para criar, e ao executar aparece o erro ''Name 'Serie' is not defined''

Pórem o curioso é que no python console funciona normalmente e consigo atribuir valores a classe e utilizar ela normalmente, abaixo um testezinho mostrando que está tudo ok com código

    from projeto import Classe
    >>>s1 = Serie('jsdaasd', 56465, 54654)
    >>>s1.nome
    'Jsdaasd'
    >>>s1.dar_like()
    >>>s1.likes
    1
    >>>s1.dar_like()
    >>>s1.likes
    2
1 resposta

Oi Iuri, tudo bem?

Vou te ajudar com o código =)

A classe Serie está aparecendo como inexistente pois a função "__init__" está incompleta, para ajeiar é só escrever os underlines ok?

Depois de consertar isso e rodar o código você vai perceber que outros erros vão aparecer, vamos lá:

A função abaixo vai dar um erro porque o código tenta mudar a própria função! Veja que o nome da função e o nome do atributo é o mesmo, assim, ao chamar a função, ela tenta alterar a si mesma e o código quebra.

@nome.setter
def nome(self, novonome):
    self.nome = novonome.tittle()

Mas fica tranquilo que isso é super fácil de ajustar.

Ao usarmos getters e setters, nossos atributos devem estar encapsulados =)

Para isso, é só adicionar dois underlines antes do nome desse atributo! Super fácil

Logo, o atributo self.nome se transformaria emself.__nome, o self.likes viraria self.__likes e o código ficaria assim:

class Serie:
    def __init__(self, nome, ano, temporadas):
        self.__nome = nome.title()
        self.ano = ano
        self.temporadas = temporadas
        self.__likes = 0

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

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

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

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

atlanta = Serie('Atlanta', 2018, 2)

Espero que isso te ajude, e qualquer coisa é só usar o fórum!

Bons estudos, Iuri, até mais =)