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的基础方面遇到了一些麻烦,并且在这段代码中遇到了问题。我正在尝试在此处创建“龙”,但遇到以下错误:


  追溯(最近一次通话):
        在第32行的文件“ test2.py”中
          打印敌人
      AttributeError:“函数”对象没有属性“名称”


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

最佳答案

您必须先创建一个类的实例,然后才能从中调用任何函数:

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 - 错误:未绑定(bind)方法Dragon()必须以Enemy实例作为第一个参数来调用(取而代之的是Player实例),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17437837/

10-10 09:59