I am trying to write a program that will: Create a class LanguageStudent with:
- property languages - returns all languages, as a list, that the student knows.
- method add_language(language) - adds a new language to the list of languages.
Create a class LanguageTeacher that inherits LanguageStudent and has one additional public method:
- teach(student, language) - if LanguageTeacher knows the required language, it teaches LanguageStudent and returns true; otherwise it returns false.
For example, the following code shows how LanguageTeacher teaches LanguageStudent the new language ('English'):
I am not sure entirely what I am doing wrong. I think I know how to correct it, but not entirely. Plus is this the best code to do what I'm supposed to do? I keep getting this error.
Traceback (most recent call last):
File "C:\Users\....\PycharmProjects\test\main.py", line 30, in <module>
teacher = LanguageTeacher()
File "C:\Users\.....\PycharmProjects\test\main.py", line 17, in __init__
super().__init__()
TypeError: LanguageStudent.__init__() missing 1 required positional argument: 'languages'
class LanguageStudent:
def __init__(self, languages):
self.languages = languages
def add_language(language):
for language in languages:
if language in languages:
return
else:
languages.append(language)
class LanguageTeacher(LanguageStudent):
def __init__(self):
super().__init__()
def teach(student, language):
if language not in student.languages:
languages.append(language)
return True
else:
return False
teacher = LanguageTeacher()
teacher.add_language('English')
student = LanguageStudent()
teacher.teach(student, 'English')
print(student.languages)
CodePudding user response:
TypeError: LanguageStudent.init() missing 1 required positional argument: 'languages'
This tells you that you are not passing enoughparameters to a function. The previous lines in the error message tell you that the problem is with these lines of code:
class LanguageTeacher(LanguageStudent):
def __init__(self):
super().__init__()
Here super().__init__()
will call LanguageStudent.__init__()
:
class LanguageStudent:
def __init__(self, languages):
self.languages = languages
This method requires a languages
parameter, but you are not providing it with an argument from LanguageTeacher.__init__()
. One fix is to just add the parameter and then pass it to the super class:
class LanguageTeacher(LanguageStudent):
def __init__(self, languages):
super().__init__(languages)
p.s. There are other problems with your code, but I won't address them here.