Python继承问题

时间:2018-08-13 16:03:23

标签: python oop inheritance parent-child

我是一名自学成才的程序员,目前正在学习基本的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()

2 个答案:

答案 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中排名最低)
  • 您的球员班级似乎包含有关教练的信息,而不是实际的球员。所以这没有任何意义。如果您想存储有关Coach的信息。创建一个Has-A relationship。简单来说,可以创建一个名为Coach的单独的类,并在 Footballer 类中对其进行实例化。或播放器
  • 我建议您通过PEP8标准。

但是没有解决其他问题,只是看代码有什么问题。 这可能有效。

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()

在这里您可以说,足球运动员是一名球员。