Mary Mary - 10 days ago 7
Python Question

What is wrong with trying to print the name of the student?

This is my code. I was trying to print the name of a student but i received a lot of errors. what did i do wrong? Thank you very much!

class Elev:
"""
Un elev are nume, cnp,clasa,
"""
def __init__(self,nume,cnp,clasa):
self.nume=nume
self.cnp=cnp
self.clasa=clasa
def set_nume(self,nume):
self.nume=nume
def get_nume(self):
return self.nume
def set_clasa(self,clasa):
self.clasa=clasa
def get_clasa(self):
return self.clasa
def set_cnp(self,cnp):
self.cnp=cnp
def get_cnp(self):
return self.cnp
def merg(self):
print("Merge la ore")
def __str__(self):
return "%s"(self.nume)


This is the second class i used:

class Student(Elev):
def __init__(self,nume,cnp,an):
self.an=an
super().__init__(self,nume,cnp)
def Vacanta(self):
print("Nu ai restanta ai vacanta!!!!!")


here us how i called the classes and functions

def Main():
student=Student("Popescu Vasile",232423423,1)
print(student.get_nume())

Main()


The error is:

Traceback (most recent call last): File "D:/Facultate/Python/tema_mostenire/tema_mostenire.py", line 36, in <module> Main() File "D:/Facultate/Python/tema_mostenire/tema_mostenire.py", line 34, in Main print(student.get_nume()) File "D:/Facultate/Python/tema_mostenire/tema_mostenire.py", line 24, in str return "%s"(self.nume) TypeError: 'str' object is not callable

Answer

Beside the indentation there's two issues with your code:

def __str__(self):
    return "%s"(self.nume)

Above is not valid Python code, you can either add % operator as Daniel suggested or you can just modify it to return the name:

def __str__(self):
    return self.nume

The second issue is with the way you call parent class constructor here:

def __init__(self,nume,cnp,an):
    self.an=an
    super().__init__(self,nume,cnp)

When super is called without parameters you don't need to supply self parameter but you need to supply all three other parameters that parent expects:

def __init__(self,nume,cnp,an):
    self.an=an
    super().__init__(nume,cnp, 'foo')