Typeerror: Calcularsalario() Missing 1 required positional argument: 'Title'

Asked

Viewed 5,228 times

0

While trying to create a simple Python Code and I came across the following error in the method of calculating salary

Typeerror: Calcularsalario() Missing 1 required positional argument: 'Title'

class Professores():
    ID = 0
    Nome = "João Das Neves Negras"
    Titulo = "dr"
    Formacao = "Cientista da computação"
    DataNascimento = "22/09/1998"
    Email = "[email protected]"
    NumDisciplinas = 10

    def pegarID(self):
        return self.ID

    def pegarNome(self):
        return self.Nome

    def pegarTitulo(self):
        return self.Titulo

    def pegarFormacao(self):
        return self.Formacao

    def pegarDataNascimento(self):
        return self.DataNascimento

    def pegarEmail(self):
        return self.Email

    def pegarNumDisciplinas(self):
        return self.NumDisciplinas

    def DefinirID(self, id):
        self.ID = id

    def DefinirNome(self, nome):
        self.Nome = nome

    def DefinirTitulo(self, Titulo):
        self.Titulo = Titulo

    def DefinirFormacao(self, Formacao):
        self.Formacao = Formacao

    def DefinirDataNascimento(self, DataNascimento):
        self.DataNascimento = DataNascimento

    def DefinirEmail(self, Email):
        self.Email = Email

    def DefinirNumDisciplinas(self, NumDisciplinas):
        self.NumDisciplinas = NumDisciplinas

    def CalcularSalario(self):
        salario = (400 * self.NumDisciplinas)
        if(self.Titulo == "me"):
            return salario + salario*0.3
        if(self.titulo == "dr"):
            return salario + salario*0.5
        else:
            return salario

prof = Professores()

prof.DefinirID(1)
print('ID: {}'.format(prof.pegarID()))
print('Nome: {}'.format(prof.pegarNome()))
print('Titulo: {}'.format(prof.pegarTitulo()))
print('Formação: {}'.format(prof.pegarFormacao()))
print('Data de nascimento: {}'.format(prof.pegarDataNascimento()))
print('Email: {}'.format(prof.pegarEmail()))
print('Número de disciplinas: {}'.format(prof.pegarNumDisciplinas()))
print('Salario: {}'.format(prof.CalcularSalario()))
  • 2

    I ran your code here and got the bug Attributeerror: 'Teachers' Object has no attribute 'title', which indicates that on line 56 you used self.titulo instead of self.Titulo. Other than that, it spun (no mistakes).

2 answers

1

When executing your code the error that was raised was as follows:

Attributeerror: 'Teachers' Object has no attribute 'title'

This is happening because the objects in your class contain neither the 'title' attribute, nor any of the attributes you want. To make objects in your class have the desired attributes you must create them within the method __init__. Your corrected class would be more like this:

class Professor:
    def __init__(self, id, nome, titulo, formacao, data_nascimento, email, num_disciplinas):
        self.id = id
        self.nome = nome
        self.titulo = titulo
        self.formacao = formacao
        self.data_nascimento = data_nascimento
        self.email = email
        self.num_disciplinas = num_disciplinas

    def calcular_salario(self):
        salario = 400 * self.num_disciplinas

        if self.titulo == 'me':
            return salario + salario * 0.3
        elif self.titulo == 'dr':
            return salario + salario * 0.5
        else:
            return salario


prof = Professor(1, 'João Das Neves Negras', 'dr', 'Cientista da computação', '22/09/1998', '[email protected]', 10)

print('ID: {}'.format(prof.id))
print('Nome: {}'.format(prof.nome))
print('Titulo: {}'.format(prof.titulo))
print('Formação: {}'.format(prof.formacao))
print('Data de nascimento: {}'.format(prof.data_nascimento))
print('Email: {}'.format(prof.email))
print('Número de disciplinas: {}'.format(prof.num_disciplinas))
print('Salario: {}'.format(prof.calcular_salario()))

1

Why did you put these attributes as static? It would not be more logical to put it into a method init? Type Thus:

class Professores():
    def __init__(self,ID,nome,Titulo,Formacao,DataNasc,email,NumDisc)
        self.ID=ID
        self.Titulo=Titulo
        self.Nome=nome
        self.Formacao=Formacao
        self.DataNascimento=DataNasc
        self.Email=email
        self.NumDisciplinas=NumDisc

    def pegarID(self):
        return self.ID

    def pegarNome(self):
        return self.Nome

    def pegarTitulo(self):
        return self.Titulo

    def pegarFormacao(self):
        return self.Formacao

    def pegarDataNascimento(self):
        return self.DataNascimento

    def pegarEmail(self):
        return self.Email

    def pegarNumDisciplinas(self):
        return self.NumDisciplinas

    def DefinirID(self, id):
        self.ID = id

    def DefinirNome(self, nome):
        self.Nome = nome

And another thing: Will you put your attributes as private? So this get functions? Because otherwise, they are unnecessary. As far as I know, in python the methods and attributes are public by default

Browser other questions tagged

You are not signed in. Login or sign up in order to post.