gpt4 book ai didi

python - 错误: unbound method Dragon( ) must be called with Enemy instance as first argument (got Player instance instead)

转载 作者:行者123 更新时间:2023-12-01 05:41:26 25 4
gpt4 key购买 nike

class Character: 
def __init__(self):
self.name = ""
self.health = 1
self.health_max = 1

class Player(Character):
def __init__(self):
Character.__init__(self)
self.state = 'normal'
self.health = 10
self.health_max = 10

class Monster(Character):
def Dragon(self):
self.name = "Dragon"
self.health = 20

def Goblin(self):
name = "Goblin"
health = 5

p = Player()
p.name = raw_input("Please enter your name: ")
print p.name
print p.state
print p.health
print p.health_max

m = Monster()
enemy = m.Dragon
print enemy.name
print enemy.health

抱歉,我已经简化了一些,以解释我遇到的困难。我在 OOP 基础知识方面遇到了一些麻烦,并且在这段代码中遇到了问题。我试图在这里创建一个“龙”,但遇到以下错误:

Traceback (most recent call last): File "test2.py", line 32, in print enemy.name AttributeError: 'function' object has no attribute 'name'

你能告诉我我在这里做错了什么吗?谢谢。

最佳答案

在调用类的任何函数之前,您必须先创建类的实例:

myenemy = Enemy()
myenemy.Dragon()

在您的代码中,您似乎创建了 self.enemy ,但稍后你调用self.enemy = Enemy.Dragon(self) 。代替最后一行,输入 self.enemy = self.enemy.Dragon(self) .

这似乎也是您其余代码中反复出现的问题。 Commands = {'explore': Player.explore}可能应该是Commands = {'explore': p.explore} (在创建实例 p 之后)。

<小时/>

自从您更新代码以来,我认为您将函数和类混淆了。 Dragon是一个函数,当你这样做 enemy = m.Dragon ,您只需将函数复制到敌人身上即可。因此,当你这样做 enemy.name 时,认为它是一个类,会引发错误,因为 enemy现在是一个函数,而不是一个实例。

您必须为不同的怪物创建单独的类别:

class Dragon:
self.name = "Dragon"
self.health = 20

class Goblin:
name = "Goblin"
health = 5

关于python - 错误: unbound method Dragon( ) must be called with Enemy instance as first argument (got Player instance instead),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17437837/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com