Python 如何从另一个文件引用变量

Python 如何从另一个文件引用变量,python,Python,我有两个文件:client.py和ItemDatabase.py。我试图将项目值存储在一个单独的源文件中,类似于数据库,然后在其他源文件中需要时调用这些项目值。在这里,我有Item和WeaponData类,它们都保存关于该项的信息,然后在ItemDatabase中创建实例本身。当我想通过print语句在另一个源文件中获取该信息时,我遇到了一个错误:namererror:name'tinder_-swool'未定义,即使我的IDE识别出tinder_-swool是ItemDatabase的一部分

我有两个文件:client.py和ItemDatabase.py。我试图将项目值存储在一个单独的源文件中,类似于数据库,然后在其他源文件中需要时调用这些项目值。在这里,我有Item和WeaponData类,它们都保存关于该项的信息,然后在ItemDatabase中创建实例本身。当我想通过print语句在另一个源文件中获取该信息时,我遇到了一个错误:namererror:name'tinder_-swool'未定义,即使我的IDE识别出tinder_-swool是ItemDatabase的一部分

在client.py中:

从ItemDatabase导入* 导入pygame作为pg 类别项目: 定义初始自我: self.name= 自我描述= self.max\u堆栈大小=0 self.icon= 类武器数据项: 定义初始自我: 超级__ 自损=0 self.range=0 自我冷却时间=0 self.max_条件=0 self.max\u堆栈大小=1 printtinder_.name 在ItemDatabase.py中:

从客户端导入* 打火者之剑=武器数据 tinder_剑。名称=tinder剑 tinder_剑.description=脆弱且脆弱,但作为首发武器也不错。 打火者之剑。伤害=10 打火者之剑。冷却时间=0.2 打火刀。最大条件=75
为了在这里提供帮助,通常我会创建一个config.py文件,其中包含与client.py中相同的类和内容

from ItemDatabase import *
然后将其导入doSomething.py,然后在其中进行打印

import pygame as pg


class Item:
    def __init__(self):
        self.name = ""
        self.description = ""
        self.max_stack_size = 0
        self.icon = ""

class WeaponData(Item):
    def __init__(self):
        super().__init__()
        self.damage = 0
        self.range = 0
        self.cooldown = 0
        self.max_condition = 0
        self.max_stack_size = 1
嘿因此,代码的问题并不是没有导入变量。问题是您正在将客户端导入ItemDatabase.py,然后将ItemDatabase导入客户端。 导入python文件时,不在作用域中的所有代码都将运行。因此,如果你遵循逻辑: 在client.py中

from ItemDatabase import *
现在我们在ItemDatabase中运行代码

from client import *
现在我们在客户端运行代码 但现在python已经导入了ItemDatabase,所以跳过了它。 现在,我们在client.py中创建了两个类,并运行最后一行代码:

print(tinder_sword.name)
除了。我们还没有实际运行代码来创建tinder_剑。因为我们仍处于将客户机导入ItemDatabase的阶段

导入文件需要单向流动,就像河流一样。如果您需要两个文件来使用彼此的数据,那么您可以在file2中创建一个名为Populater的类。文件1导入Populator,为其提供文件2所需的值,然后退出。文件2永远不需要导入文件1,但其填充类仍将具有文件1的值。这就像是派遣一艘动力船到河上取些原木,然后将船驶回河下,在那里使用

然而,这不是编写程序的好方法!这通常意味着您对应用程序的思考方式过于纠结,可能会导致更多类似这样的错误

编写这样一个程序的好方法是进行所谓的关注点分离。一个文件只专注于做一件事。但有一件事做得很好。例如:您可能有一个SwordBuilder文件。它创造了惊人的剑。那么您可能有一个存储类。它专注于存储和读取文件系统中的任何项目,以便保存游戏

希望这有帮助