【发布时间】:2019-11-19 08:52:15
【问题描述】:
我对 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)
这是一个比较基础的概念,我想大家都能掌握。
但是,我无法理解子类如何协同工作以及如何调用存储在类中的函数。我想为类怪物或人添加一个名为“损坏”的函数。我试过让类怪物继承类人,这样它也有它的属性,可以对它的健康造成损害。
我想创建这样的东西:
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 之间的所有差异。我试图调整和剖析代码,以便更好地理解底层流程,但我运气不佳。它不断在多个位置出现故障,我不断在各处收到“属性错误”。
我真正喜欢这段代码的一点是角色可以输入“帮助”或“攻击”之类的命令,然后调用相应类的函数。我想修改此代码,使其更适合我的需求,例如向其中添加其他功能和字符,但我真的没有太多运气。
如果有人可以帮助修复我非常有缺陷的代码和思想,我将非常感激。
我也感谢您抽出时间阅读本文。
克里斯托弗
【问题讨论】:
-
如果这是您拥有的全部代码,那么解决方案很简单:您没有名为“stärke”的属性,我建议不要在编码。否则,如果这不是您的全部代码,请提供其余代码。
-
您好,Boendal,这不是问题所在。我只是忘了更改条款。我仍然会得到像 TypeError: attack() missing 1 required positional argument: 'self' NameError: name 'self' is not defined 谢谢你让我知道我忘了更新它。
-
我不完全确定你在这里问什么。但是你不是说
boo.attack()吗? “monster”是类,而不是实例(请注意,如果您使用正确的 Python 样式,这会更清楚,即类名的 InitialCaps:Monster、Character)。 -
嘿,哇,这实际上帮了很多忙。该程序没有显示任何错误,但也没有产生预期的效果,请原谅我对术语的正确掌握。感谢您指出正确的风格。我忘记了类必须大写。我只是忘了使用它,因为我讨厌在编写代码时使用大写字母。基本上,每当我调用函数“boo.attack()”时,我希望角色 John 的健康状况减少 1 点。
-
好吧,那么你需要告诉怪物他们正在攻击的是谁,即约翰。因此,您需要接受(例如)“目标”作为“攻击”的参数,并从中减去生命值而不是自身。
标签: python class subclass legacy-code