我是一名自学成才的程序员,目前正在学习基本的python;使用python读取具有继承性的资料,但仍然不了解其工作原理。
在这里,球员是足球的子类别;但是,它不能从Football继承函数/对象(.getCoach)。 (错误:p.getCoach())-最后一行。 我可以知道哪一部分出了问题吗?
class Football:
def __init__(self, name, ranking, coach):
self.name= name
self.rank = ranking
self.coach= coach
def getName(self):
print(self.name)
def getRank(self):
print(self.name+ "was in" + self.rank)
def getCoach(self):
if self.rank<5:
print(self.coach+ "is a bad coach")
else:
print(self.coach+ "is a good coach")
class Players(Football):
def __init__(self, Appearances, Score):
self.Appearances= Appearances
self.Score= Score
def getapp(self):
print(self.Appearances)
def getscore(self):
print(self.Score)
p = Players(5,5, "Vincent")
p.getCoach()
答案 0 :(得分:2)
您使用Football的Players
方法的参数调用了__init__
,但是您的Players.__init__
没有调用Football.__init__
。看来您想在初始化Player
时传递两个附加值。
以下内容使用super
来调用父级的__init__
函数。请注意,Player.__init__
需要采用Football.__init__
所需的所有参数,除非您有其他方法来提出它们。它使Football
类初始化其关心的字段(通过super()
),然后Player
初始化其自己的字段。请注意,该代码假定使用Python 3,因为它不带任何参数调用super()
。 Python 2的语法有些不同。
class Football:
def __init__(self, name, ranking, coach):
self.name= name
self.rank = ranking
self.coach= coach
def getName(self):
print(self.name)
def getRank(self):
print(self.name+ "was in" + self.rank)
def getCoach(self):
if self.rank<5:
print(self.coach+ "is a bad coach")
else:
print(self.coach+ "is a good coach")
class Players(Football):
def __init__(self, name, ranking, coach, Appearances, Score):
super().__init__(name, ranking, coach) # calls Football.__init__()
self.Appearances= Appearances
self.Score= Score
def getapp(self):
print(self.Appearances)
def getscore(self):
print(self.Score)
p = Players(5,5, "Vincent", 2, 3)
p.getCoach()
答案 1 :(得分:1)
这里有很多问题。第一。
object
类派生的,因此继承将不起作用。 (在2.7中排名最低)Has-A relationship
。简单来说,可以创建一个名为Coach
的单独的类,并在 Footballer 类中对其进行实例化。或播放器。 但是没有解决其他问题,只是看代码有什么问题。 这可能有效。
class Player(object):
def __init__(self, name, ranking, coach):
self.name= name
self.rank = ranking
self.coach= coach
def get_name(self):
print(self.name)
def get_rank(self):
print(self.name + "was in" + self.rank)
def get_coach(self):
if self.rank<5:
print(self.coach + "is a bad coach")
else:
print(self.coach + "is a good coach")
class Footballer(Player):
def __init__(self, name, ranking, coach, appearances, score):
self.appearances= appearances
self.score= score
super(Footballer, self).__init__(name, ranking, coach)
def get_appearances(self):
print(self.Appearances)
def get_score(self):
print(self.Score)
p = Footballer("name", 20.2, "coach name", "appearances", 200)
p.get_coach()
在这里您可以说,足球运动员是一名球员。