回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我正在尝试根据以下继承关系构建类:<br/></p>
<blockquote>
<p>Person -> Student -> UniversityStudent -> GraduateStudent -> GradTA <br/>
\ ^<br/>
\---------------------------------> Teacher ----------------------------------/ <br/></p>
</blockquote>
<p><strong>我的代码</strong>:</p>
<pre><code>class Person:
def __init__(self,age,name):
self.age = age
self.name = name
class Student(Person):
def __init__(self,age,name,school):
super().__init__(age,name)
self.school = school
class UniversityStudent(Student):
def __init__(self,age,name,school,major):
super().__init__(age,name,school)
self.major = major
class GraduateStudent(UniversityStudent):
def __init__(self,age,name,school,major,advisor):
super().__init__(age,name,school,major)
self.advisor = advisor
class Teacher(Person):
def __init__(self,age,name,school,subject):
super().__init__(age,name)
self.school = school
self.subject = subject
class GradTA(GraduateStudent,Teacher):
def __init__(self,name,age,school,subject,major,advisor):
GraduateStudent.__init__(self,age,name,school,major,advisor)
Teacher.__init__(self,age,name,school,subject)
x = GradTA(name="Peter",school="Harvard",age=25,subject="Linear Algebra",major="Mathematics",advisor="Yau")
</code></pre>
<p><strong>错误消息</strong>:</p>
<pre><code>Traceback (most recent call last):
File "<stdin>", line 32, in <module>
x = GradTA(name="Peter",school="Harvard",age=25,subject="Linear Algebra",major="Mathematics",advisor="Yau")
File "<stdin>", line 29, in __init__
GraduateStudent.__init__(self,age,name,school,major,advisor)
File "<stdin>", line 18, in __init__
super().__init__(age,name,school,major)
File "<stdin>", line 13, in __init__
super().__init__(age,name,school)
File "<stdin>", line 8, in __init__
super().__init__(age,name)
TypeError: __init__() missing 2 required positional arguments: 'school' and 'subject'
</code></pre>
<p>错误消息表明<code>Student.__init__()</code>调用<code>Person.__init__()</code>时出现问题<br/></p>
<p>如果我在<code>Student</code>中写入<code>__init__()</code>作为</p>
<pre><code>class Student(Person):
def __init__(self,age,name,school):
self.age = age
self.name = name
self.school = school
</code></pre>
<p>或</p>
<pre><code>class Student(Person):
def __init__(self,age,name,school):
Person.__init__(self,age,name)
self.school = school
</code></pre>
<p>,然后一切顺利<br/></p>
<p>但是我仍然想知道我最初使用<code>super()</code>时出了什么问题</p>