Python中的文本冒险:使用类和Inheritan

2024-04-18 17:42:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Python中的类和子类的概念相当陌生。我在Stackoverflow上找到了一些与我的问题相关的问题/答案,但它们似乎并没有真正回答我要寻找的细节。我查阅了YouTube和其他网站,但运气不太好。现在,我可能问错了问题,或者看错了方向地方。所以呢,请忍耐一下。你知道吗

现在,我明白了类在Python中是如何工作的。这不是问题所在。你知道吗

class Person:
  def __init__(self, name, age):
    self.name = name
    self.age = age

p1 = Person("John", 36)

print(p1.name)
print(p1.age)

这是一个相对基本的概念,我想每个人都能掌握。你知道吗

但是,我很难理解子类如何协同工作,以及如何调用存储在类中的函数。我想给怪物或人类添加一个名为“damage”的函数。我试过让怪物继承人,这样怪物也有它的属性,并且可以对它的健康造成伤害。你知道吗

我想创造这样的东西:

class character:
    def __init__(self, name, health ):
        self.name = name
        self.health = health

class  monster(character):
    def __init__(self, name, health):
        character.__init__(self,name,health)
        self.health = health
        self.name = name

    def attack (self):
         self.health-1

john=character("john",22)
boo=monster("boo",20,22)
monster.attack()

通过在类之外调用此代码,我希望使用函数攻击,从而降低用户的健康状况。你知道吗

我还是个新手,我试过各种方法。你知道吗

为了让您更好地理解我的意思,下面是我尝试使用的参考代码:

https://trinket.io/python/07c3a147aa

不幸的是,它是用遗留代码编写的,我并不熟悉2.7和3.8之间的所有差异。我试着调整和剖析代码,以便更好地理解底层流程,但运气不太好。它不断地在多个地方出现,我不断地得到“属性错误”到处都是。你知道吗

我真正喜欢这段代码的地方是,角色可以输入“help”或“attack”这样的命令,然后调用相应类中的函数。我想修改这段代码,使它更适合我的需要,比如添加其他函数和字符,但我真的没有太多的运气。你知道吗

如果有人能帮我修复有缺陷的代码和想法,我会非常感激。你知道吗

我也感谢你抽出时间来读这篇文章。你知道吗

克里斯托弗


Tags: 函数代码nameselfageinitdef地方
1条回答
网友
1楼 · 发布于 2024-04-18 17:42:49

你的代码有两个问题,除了你已经注意到的名字混淆。你知道吗

def attack (self):
     self.health-1

这应该是:

def attack(self):
    self.health -= 1

您的原始代码从健康值中减去一,然后丢弃结果。你知道吗

第二个问题是:

boo=monster("boo",20,22)
monster.attack()

这应该是:

boo=monster("boo",20)
boo.attack()

如果要调用类方法,则需要对该类的对象而不是类本身进行调用。你知道吗

编辑:正如下面的评论所注意到的,有一个参数太多了。你知道吗

Edit2:关于您对攻击功能的请求,显而易见的解决方案是:

john.attack()

(这当然需要一个适合角色类的攻击函数)

但也许你想让怪物攻击约翰。可以这样实现:

def attack(self, target):
    target.health -= 1

然后进行攻击:

boo.attack(john)

相关问题 更多 >