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

Text Adventure in Python: Working with Classes and Inheritance

我对 Python 中 classes 和 subclasses 的想法相当陌生。我在 Whosebug 上找到了一些与我的问题相关的 questions/answers,但它们似乎并没有真正回答我正在寻找的细节。我咨询了 YouTube 和其他网站,但运气不佳。现在,我可能问错了问题或看错了 places.So,请耐心等待。

现在,我明白 classes 在 Python 中是如何工作的。不是这个问题。

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

p1 = Person("John", 36)

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

这是一个比较基础的概念,我想大家都能掌握。

但是,我无法理解 subclass 如何协同工作以及如何调用存储在 class 中的函数。我想给 class 怪物或人添加一个名为 "damage" 的函数。我试过让 class 怪物继承 class 人,这样它也有它的属性并且可以对其健康造成伤害。

我想创建这样的东西:

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

通过在 classes 之外调用这段代码,我想使用函数攻击来降低用户的健康。

我还是新手,各种方法都试过了

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

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

不幸的是,它是用遗留代码编写的,我不熟悉 2.7 和 3.8 之间的所有区别。我试图调整和剖析代码,以便更好地理解底层流程,但我的运气并不好。它不断地在多个地方坏掉,我不断地得到 "Attribute Errors" 到处都是。

我真正喜欢这段代码的地方在于,角色可以输入 "help" 或 "attack" 之类的命令,然后调用相应 class 中的函数。我想修改这段代码,以便它更好地满足我的需要,比如向其中添加其他功能和字符,但我真的没有太多运气。

如果有人可以帮助修复我非常有缺陷的代码和想法,我将不胜感激。

也感谢您抽出时间阅读本文。

克里斯托弗

除了您已经注意到的名称混淆之外,您的代码还有两个问题。

def attack (self):
     self.health-1

这应该是:

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

您的原始代码从健康值中减去 1,然后丢弃结果。

和第二个问题:

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

这应该是:

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

如果您想调用 class 方法,您需要在 class 的对象上调用,而不是在 class 本身上调用。

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

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

john.attack()

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

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

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

然后执行攻击:

boo.attack(john)