1
resposta

"Unresolved reference 'title'" - pyCharm

class Book:

    def __init__(self, title, author, translators, edition, pages, publishing_company):
        print("Construindo objeto ... {}".format(self))
        self._title = title
        self._author = author
        self._translators = translators
        self._edition = edition
        self._pages = pages
        self._edition = edition
        self._publishing_company = publishing_company


    def register(self):
        print("The {} book written by the author {} is registred".format(self._title, self._author, self._translators,
                                                                        self._edition, self._pages, self._edition,
                                                                         self._publishing_company))

    @title.setter
    def title(self, title):
        print("Chamando setter title()")
        self._title = title

Boa noite pessoal, criei uma classe para registrar livros da minha biblioteca, porém com objetivo de exemplificar o setter, criei a def title.

@title.setter
    def title(self, title):
        print("Chamando setter title()")
        self._title = title

Porém o pycharm acusa um erro "Unresolved reference 'title'" Se alguém puder ajudar?

1 resposta

Olá Eduardo, tudo bem com você?

Meus parabéns pela implementação do código, fico feliz em ver sua dedicação colocando em prática o que está aprendendo junto à Alura.

O erro Unresolved reference 'title' está sendo apresentado por não ter sido encontrado um decorator @property para o método title, quando vamos usar o decorator do tipo setter temos que ter declarado anteriormente um método do tipo getter (@property). O método ficará da seguinte forma.

    @property
    def title(self):
        return self._title

O decorator @property corresponde a função property() do python, quando usamos ela como decorator estamos adicionando funcionalidades “especiais” a um método, fazendo ele agir como getters ou setters sem precisar mudar sua sintaxe;

Para usarmos o @property temos que seguir algumas regras.

  • Podemos trabalhar com o apenas o @property, ou seja apenas com um método que retorna algo (getter).
  • Para termos um método do tipo setter, temos que ter declarado antes um método do tipo @property.
  • Quando declaramos um método do tipo setter a sintaxe do decorator deve ser conforme mostrado abaixo:
    • @< nome_do_metodo>.setter

Assim, basta adicionar o método do tipo getter anteriormente ao método do tipo setter retornando o atributo self._title. Como no código completo abaixo.

class Book:

    def __init__(self, title, author, translators, edition, pages, publishing_company):
        print("Construindo objeto ... {}".format(self))
        self._title = title
        self._author = author
        self._translators = translators
        self._edition = edition
        self._pages = pages
        self._edition = edition
        self._publishing_company = publishing_company

    def register(self):
        print("The {} book written by the author {} is registred".format(self._title, self._author, self._translators,
                                                                        self._edition, self._pages, self._edition,
                                                                         self._publishing_company))

    @property
    def title(self):
        return self._title

    @title.setter
    def title(self, title):
        print("Chamando setter title()")
        self._title = title

Para saber um pouco mais sobre o uso dos @property, recomendo a leitura dos seguintes artigos, estão em inglês, caso tenha dificuldade com o idioma recomendo o uso do tradutor do navegador.

Lembre-se que pode contar sempre com o fórum Alura, seja para compartilhar o seu desenvolvimento ou para tirar suas dúvidas.

Fico à disposição.

Abraços e bons estudos.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!