Python:为什么说明我的方法没有明确定义?

时间:2015-06-28 19:08:43

标签: python class methods

class GameMech:
    def __init__(self ,aCharacter):
        print("A battle is starting")
    def getMP(self, aCharacter):
        return aCharacter.mp
    def getHP(aCharacter):
        return aCharacter.hp
    def getAtk(aCharacter):
        return aCharacter.atk
    def getDef(aCharacter):
        return aCharacter.defense
    def usePotion(aCharacter):
        aCharacter.hp += 100
        return aCharacter.hp
    def useSpecial(self, aCharacter, target):
        if aCharacter.mp >= 100:
            target.hp -= 45

    def dead(self, aCharacter):
        return aCharacter.name +" is now dead"
    def attack(self, aCharacter, target):
        if target.hp - (aCharacter.atk/aCharacter.defense) <= 0:
            dead(target)
        else:
            target.hp - aCharacter.atk/aCharacter.defense
            print(getHP(target))
    def guard(self, aCharacter):
        print(aCharacter + "was unharmed")
        if aCharacter.hp <= 50:
            retaliation(aCharacter, target)
    def retaliation(self ,aCharacter, target):
        target.hp - (aCharacter.atk/10)
        print(getHP(target))

    def battleMenu(aNumber, self):
        if aNumber == 1:
            attack(aCharacter, target)
        if aNumber == 2:
            guard(aCharacter)
            print(aCharacter + " was unharmed!")
        if aNumber == 3:
            useSpecial(aCharacter, target)
            print(getHP(target))
        if aNumber == 4:
            heal = useItem(aCharacter)
            print(heal)

    def myTurn(self):
        print("ATTACK")
        print("GUARD")
        print("SPECIAL")
        print("ITEM")
        aNumber = int(input("What would you like to do? "))
        battleMenu(aNumber)

    def oppTurn(self):
        print("It is the opponent's turn")
        randomNum = random.randint(1,4)
        battleMenu(randomNum)

一些注意事项,显然由于这种格式化,你不能说我的所有方法实际上都在课堂下,但它们是。 你可以忽略前几个部分,我关注的部分是战斗菜单。 因此,我正在创建一个小文本游戏作为我自己的项目,纯粹的休闲没有学术或工作。对我来说,这只是一个小游戏,可以帮助我慢慢记住我对python的记忆。所以这就是我的游戏内容,角色类是另一个文件,没有什么重要的只有角色的属性(hp,mp,atk,def) 这是主要的

import random
import character
import battle



#create a battle menu
#and a character value check menu
#add buttons




def main():
char1 = character.Character("Charlie", 5000, 2000, 1500, 750)
char2 = character.Character("Mark", 2000, 4000, 2000, 900)

newGame = battle.GameMech(char1)
while char1.hp != 0 or char2.hp != 0:
    newGame.myTurn()
    newGame.oppTurn()

main()的 (不确定为什么它不包括我在代码片段中的main的定义) 任何我如何得到这个错误说“名称'battleMenu'没有定义”。 名称通常适用于变量是否正确?但是战斗菜单是一种方法,我有这个错误的原因吗?

Traceback (most recent call last):
File "E:\PythonGame\mainGame.py", line 22, in <module>
  main()
File "E:\PythonGame\mainGame.py", line 20, in main
  newGame.myTurn()
File "E:\PythonGame\battle.py", line 55, in myTurn
  battleMenu(self,aNumber)
NameError: name 'battleMenu' is not defined

3 个答案:

答案 0 :(得分:1)

要调用方法,您需要提及您正在调用它的实例,因此您需要执行self.battleMenu()。您需要对代码中的所有方法调用进行类似的更改。您还需要为所有方法添加self参数,以便这些更改可以正常工作。您还需要阅读the Python tutorial以了解Python基础知识。

答案 1 :(得分:0)

self.battleMenu(...)  # note the "self" here

答案 2 :(得分:0)

你错误地调用它,def battleMenu(aNumber):,你的函数没有被定义为实例函数,也没有被定义为静态方法。如果你想要一个静态函数,你应该首先将该方法注释为静态方法,通过使用@staticmethod注释。

然后将您的函数称为 - GameMech.battleMenu(random)

如果您希望它是实例函数,请将定义更改为def battleMenu(self, aNumber):,然后检查。