報錯了,請大神們幫我看看哪里錯了唄!
class?Person:
????def?__init__(self,name,gender):#2
????????self.name=name
????????self.gender=gender
class?Student(Person):
????def?__init__(self,name,gender,score):#2+1
????????super(Student,?self).__init__(name,gender)
????????self.score=score
class?Teacher(Person):
????def?__init__(self,name,gender,subject):#2+1
????????super(Teacher,?self).__init__(name,?gender)
????????self.subject=subject
class?SkillMixin:
????def?__init__(self,skill):#1
????????self.skill=skill
class?BasketballMixin(SkillMixin):
????def?__init__(self,skill,basketball):#1+1
????????super(BasketballMixin,?self).__init__(skill)
????????self.basketball=basketball
class?FootballMixin(SkillMixin):
????def?__init__(self,skill,football):#1+1
????????super(FootballMixin,?self).__init__(skill)
????????self.football=football
class?BasStudent(Student,BasketballMixin):
????def?__init__(self,name,gender,score,skill,basketball):#3+2
????????super(BasStudent,?self).__init__(name,gender,score)
????????super(BasStudent,?self).__init__(skill,basketball)
????????print("我叫?%s,我會打%s?"%(self.name,self.basketball))
class?FootballTeacher(Teacher,FootballMixin):
????def?__init__(self,name,gender,subject,skill,football):
????????super(FootballTeacher,?self).__init__(name,gender,subject)
????????super(FootballTeacher,?self).__init__(skill,football)
????????print("我叫?%s,我會打%s?"%(self.name,self.football))
a=Student('jiji','male',93)
b=Teacher('kiki','female','English')
c=BasketballMixin('skill','籃球')
d=FootballMixin('ski','足球')
BasStudent(a.name,a.gender,a.score,c.skill,c.basketball)
FootballTeacher(b.name,b.gender,b.subject,d.skill,d.football)Traceback (most recent call last):
? File "/Users/lihui/IdeaProjects/laern/Python j進階/3章 類的繼承.py", line 278, in <module>
? ? BasStudent(a.name,a.gender,a.score,c.skill,c.basketball)
? File "/Users/lihui/IdeaProjects/laern/Python j進階/3章 類的繼承.py", line 266, in __init__
? ? super(BasStudent, self).__init__(skill,basketball)
TypeError: __init__() missing 1 required positional argument: 'score'
2022-04-06
你在BasStudent里面兩次調用了super方法,一廂情愿地認為會分別調用兩個父類的init方法,但實際上不是,所以程序報錯認為缺參數(可能是兩次調用了同一個三參數的父類init方法)。具體原因我也沒搞清楚,不過網上的忠告:不惜一切代價地避免多重繼承,它帶來的麻煩比能解決的問題都多。如果你非要用,那你得準備好專研類的層次結構,以及花時間去找各種東西的來龍去脈吧!
2022-03-31
score需要必填的呀