我对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之间的所有差异。我已经尝试调整和分解代码,以便更好地理解底层流程,但是运气不佳。它不断地突破多个位置,而且我到处都在不断遇到“属性错误”。
我真正喜欢此代码的地方是,角色可以输入“ help”或“ attack”之类的命令,然后调用相应类中的函数。我想修改此代码,以使其更适合我的需求,例如向其添加其他功能和字符,但是我倒不是很幸运。
[如果有人可以帮助修复我非常有缺陷的代码和思想,我将非常感激。
我也感谢您抽出宝贵的时间阅读本文。
克里斯托弗
您的代码除了您已经注意到的名称混淆之外,还有两个问题。
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()
如果要调用类方法,则需要在该类的对象上而不是在类本身上进行调用。
编辑:正如下面的评论者所注意到的,一个参数太多了。