首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Python中使用OOP

在Python中使用OOP
EN

Stack Overflow用户
提问于 2018-07-30 03:44:19
回答 3查看 116关注 0票数 0

我正在使用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

谁能解释为什么这个输出是"Player“而不是"Chris”。我的另一个问题是,我不完全确定初始化方法是如何工作的。super在这些情况下会做些什么呢?使用name值调用init到底做了什么?谢谢。

EN

回答 3

Stack Overflow用户

发布于 2020-11-12 08:57:52

当创建该类的对象时,将调用__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的属性。

票数 2
EN

Stack Overflow用户

发布于 2018-07-30 03:53:15

在Blacksmith的__init__方法中对super()的调用等于它的超类,在本例中是Character。

您也可以用Character.__init__(self, name)替换super(Blacksmith, self).__init__(name)。这两个是等价的。

票数 0
EN

Stack Overflow用户

发布于 2018-07-30 03:59:22

稍微调整一下

def setplayername(self,inputplayername):
    self.playerName = inputplayername

如果您不想更改任何其他内容,可以在Hero类中修复它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51583944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档