【问题标题】:Error: unbound method Dragon( ) must be called with Enemy instance as first argument (got Player instance instead)错误:必须使用 Enemy 实例作为第一个参数调用未绑定的方法 Dragon()(改为获取 Player 实例)
【发布时间】:2013-07-03 00:21:11
【问题描述】:
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 的基础知识方面遇到了一点麻烦,而且我遇到了这个 sn-p 代码的问题。我试图在这里创建一个“龙”,但我遇到了以下错误:

Traceback(最近一次调用最后一次): 文件“test2.py”,第 32 行,在 打印敌人名称 AttributeError: 'function' 对象没有属性 'name'

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

【问题讨论】:

  • 我没有看到 enemy 在任何地方定义。问题中是否存在拼写错误,或者myenemy 应该是enemy
  • 很好,我已将其更改为敌人,但仍然出现相同的错误。

标签: python methods instance init


【解决方案1】:

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

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

【讨论】:

  • 您好,感谢您的回答。我已经稍微改变了我的问题的格式,以更好地解释我遇到的问题。如果您有机会查看已编辑的问题,将不胜感激。谢谢。
  • 知道了。谢谢!需要复习我对函数和类的理解。
猜你喜欢
  • 2017-05-10
  • 2011-05-27
  • 2018-02-18
  • 2023-04-06
  • 1970-01-01
  • 2017-04-03
  • 2017-12-09
  • 2015-12-01
  • 2018-08-12
相关资源
最近更新 更多