1
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 的基础知识方面遇到了一点麻烦,而且我在这段代码中遇到了问题。我试图在这里创建一个“龙”,但我遇到了以下错误:

回溯(最近一次调用最后一次):文件“test2.py”,第 32 行,打印中的敌人。名称 AttributeError:“函数”对象没有属性“名称”

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

4

1 回答 1

2

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

myenemy = Enemy()
myenemy.Dragon()

在您的代码中,它看起来像您 created 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
于 2013-07-03T00:23:44.137 回答