1
I’m developing a little Python "online course site" system, and there’s an error that, at least for me, doesn’t make sense.
Follows the code:
from src.site.classes_de_alunos_e_professores import Professor # O único parâmetro do construtor dessa classe é o nome
class Curso:
def __init__(self, nome, aulas, professor, preco):
self._nome = nome
self._aulas = aulas
self._professor = professor
self._nota = self.nota_media()
self._avaliacoes = [] # Existe uma classe chamada Aluno que está em outro arquivo (o mesmo do Professor),
# que omiti dessa pergunta por dar espaço a esse código que já é extenso. Se for necessário posto nos
# comentários. O aluno pode avaliar o curso com uma nota float e sua
# avaliação cai (ou deve cair) automaticamente na lista.
self._preco = preco
@property
def nome(self):
return self._nome
@property
def aulas(self):
return self._aulas
@property
def professor(self):
return self._professor
@property
def nota(self):
return self._nota
@property
def preco(self):
return self._preco
@property
def avaliacoes(self):
return self._avaliacoes
def nota_media(self):
if not self._avaliacoes:
return "O curso ainda não foi avaliado"
else:
soma_das_notas = 0
for nota in self.avaliacoes:
soma_das_notas = sum(nota)
media = soma_das_notas/len(self._avaliacoes)
return media
class CursoProgramacao(Curso):
def __init__(self, nome, aulas, linguagem, professor, preco):
super().__init__(nome, aulas, professor, preco)
self._nome = nome
self._aulas = aulas
self._linguagem = linguagem
self._professor = professor
self._nota = self.nota_media()
self._avaliacoes = []
self._preco = preco
def __str__(self):
print(f"Nome do curso: {self._nome}; Nº de aulas: {self.aulas}; Tipo: Programação; "
f"Linguagem: {self._linguagem}; Professor: {self._professor.nome}; "
f"Nota: {self._nota}; Nº de avaliações: {len(self._avaliacoes)}; Preço: R${self._preco}")
class CursoDesign(Curso):
def __init__(self, nome, aulas, ferramenta, professor, preco):
super().__init__(nome, aulas, professor, preco)
self._nome = nome
self._aulas = aulas
self._ferramenta = ferramenta
self._professor = professor
self._nota = self.nota_media()
self._avaliacoes = []
self._preco = preco
def __str__(self):
print(f"Nome do curso: {self._nome}; Nº de aulas: {self._aulas}; Tipo: Design; Ferramenta: {self._ferramenta};"
f" Professor: {self._professor.nome}; Nota: {self._nota}; Nº de avaliações: {len(self._avaliacoes)}; "
f"Preço: R${self._preco}")
class CursoMobile(Curso):
def __init__(self, nome, aulas, so, professor, preco):
super().__init__(nome, aulas, professor, preco)
self._nome = nome
self._aulas = aulas
self._so = so
self._professor = professor
self._nota = self.nota_media()
self._avaliacoes = []
self._preco = preco
def __str__(self):
print(f"Nome do curso: {self._nome}; Nº de aulas: {self._aulas}; Tipo: Mobile; SO: {self._so};"
f" Professor: {self._professor.nome}; Nota: {self._nota}; Nº de avaliações: {len(self._avaliacoes)};"
f" Preço: R${self._preco}")
professor = Professor("Marcos")
curso = CursoProgramacao("Python 3", 9, "Python", professor, 130.0)
print(curso)
And the mistake I get is:
Traceback (most recent call last):
File "C:/Users/Windows 10/PycharmProjects/desenvolvimento_cursos/src/site/classes_de_cursos.py", line 87, in <module>
class CursoMobile(Curso):
File "C:/Users/Windows 10/PycharmProjects/desenvolvimento_cursos/src/site/classes_de_cursos.py", line 105, in CursoMobile
curso = CursoProgramacao("Python 3", 9, "Python", professor, 130.0)
File "C:/Users/Windows 10/PycharmProjects/desenvolvimento_cursos/src/site/classes_de_cursos.py", line 55, in __init__
super().__init__(nome, aulas, professor, preco)
File "C:/Users/Windows 10/PycharmProjects/desenvolvimento_cursos/src/site/classes_de_cursos.py", line 10, in __init__
self._nota = self.nota_media()
File "C:/Users/Windows 10/PycharmProjects/desenvolvimento_cursos/src/site/classes_de_cursos.py", line 40, in nota_media
if not self._avaliacoes:
AttributeError: 'CursoProgramacao' object has no attribute '_avaliacoes'
Process finished with exit code 1
Opa, it worked. I also edited the structure of the self. _note and changed all the classes they inherited from "Curso". But now gave another error. I am new here, so I do not know the rules of conduct right. I must open a new topic?
– Padawan_22
@Padawan_22 If this answer solved the problem that is indicated in your question, you can accept it (see here how to do this). Then you can ask another question with the new doubt. This is the idea of the site: a question for each specific problem (even if they are related, each question should be "self-contained"). For more details, see the page [Ask] and the help center
– hkotsubo