首页 > 解决方案 > 在 Python 中使用 OOP

问题描述

我在 Python 中使用 OOP,并且试图找出一些与继承相关的东西。. 我这里有一些代码,其中包含一些类。一个名为 Blacksmith 的类的行为符合预期,一个名为 Hero 的类我试图从中调用一个函数,但我收到了一个意外的输出。

class Character(object):
    def __init__(self,name):
        self.health=100
        self.name = name
    #   self.player = player
    def printName(self):
        print self.name
    #def printPlayerName(self):
    #   print self.player

class Blacksmith(Character):
    def __init__(self,name, forgeName):
        super(Blacksmith, self).__init__(name)
        #self.name = "Billy"
        self.forge = Forge(forgeName)

class Hero(Character):
    playerName = "Player"
    def __init__(self,name):
        super(Hero, self).__init__(name)
    def setplayername(self,inputplayername):
        playerName = inputplayername

class Forge:
    def __init__(self,forgeName):
        self.name = forgeName

bs = Blacksmith("Billy", "Billy's Forge")
print bs.health
bs.printName()
print bs.forge.name
player1 = Hero("Methos")
print player1.name
player1.setplayername("Chris")
#print playher1.playerName
print player1.playerName

输出是:

raina@DESKTOP-291MTC0 ~/python
$ python learningoopclasses01.py
100
Billy
Billy's Forge
Methos
Player

谁能解释为什么这个输出显示“玩家”而不是“克里斯”。我的另一个问题是我不完全确定init方法是如何工作的。super 在这些情况下会做什么?用 name 值调用 init 究竟做了什么?谢谢。

标签: pythonfunctionclassoop

解决方案


__init__在创建该类的对象时调用。使用这种方法,我们还将使用self变量来表示对象本身的实例。它必须在 Python 中显式声明才能在对象上定义。

例如,

class Student():
    def __init__(self, score1, score2, score3):
        self.scores = [score1, score2, score3]

如果您想为学生 1 分配分数,您只需要使用,因为其中stu_1已经有score一个属性:

stu_1 = Student(80, 90, 85)

此外,__init__如果任何参数输入错误,也会根据设置的内容通知您。

super()用于首先调用 的父(超)类Blacksmith,即Character,并允许您访问Character的属性。


推荐阅读