名称错误:未定义全局名称“player”

2024-04-27 04:59:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用崇高的文本构建一个PyGame,但是当我运行批处理文件来启动它时,我得到了一个错误:


Traceback (most recent call last):
 File "game.py", line 12, in <module>
    player = player("Default", 1, 1, 1)
 File "C:\Users\*****\Desktop\RPG\characters\player.py", line 8, in __init__
    Character.__init__(self, name, hp)
 File "C:\Users\*****\Desktop\RPG\characters\character.py", line 9, in  __init__
player.dead = False
NameError: global name 'player' is not defined
Press any key to continue . . .

下面是我的档案:

在游戏.py文件:


^{pr2}$

在播放器.py文件:


# Player Base File

from character import *

class player(Character):
    def __init__(self, name, hp, str, int):
        Character.__init__(self, name, hp)
        self.str = str
        self.int = int

以及字符.py文件:


# Character Base File

class Character(object):
    def __init__(self, name, hp):
        self.name = name
        self.hp = hp

        player.dead = False

    def attack(self, other):
        pass

    def update(self):
        if self.hp <= 0:
            player.dead = True
            self.hp = 0

我该怎么办?在


Tags: 文件nameinpyselfinitdefline
2条回答

不能有与您试图访问的包同名的变量。为局部变量选择除player之外的其他内容。在

而且,你的内心还是有问题的字符.py,因为该文件中没有任何名为player的定义,也没有声明全局。我想你想要的是

self.dead = False

你要创造的角色。player是一个没有dead属性的远程类。在


你不能只改变一个位置:你必须改变名字那一方面的所有用法。您已经使用player来引用两个不同的东西:(1)一个具有strint属性的类(顺便说一句:这些名称都有内置函数,因此这些名称不具区别);和(2)一个本地对象,它似乎是classplayer的实例。在

没有一个好方法可以把两者都用同一个名字。我建议用更像

^{pr2}$

您还必须将对对象player的其他引用改为pov。在


此外,您似乎被当前程序中的各种错误弄糊涂了。请考虑重新开始;使用增量编程。写几行带有init方法的类定义和实例化并打印单个对象的主程序。当这行得通时,添加几行代码:也许是一些有意义的初始化。继续一次添加和测试几行代码,直到回到现在的复杂程度。在

这允许您一次只使用一个或两个错误进行密封。你已经做了一半了,所以我不认为你会花很长时间恢复你目前的工作水平。。。但是有了法律程序。在

1)变更

from characters.player import *

from player import * in game.py

2)英寸播放器.py,class player到{}

以及

3)在character.py中,请进行此更改 从

player.dead = False

self.dead = False

相关问题 更多 >