首页 > 解决方案 > 在python中以两种方式在两个文件之间传递变量

问题描述

好的,所以我知道这可能看起来很愚蠢,但我目前正在使用多个文件制作游戏,其中一个主要文件从其他文件接收所有变量并以某种方式使用它们。我正在使用:

from SPRITES import *

要获得这些变量,但是现在我需要一个只能在 SPRITES 中的 MAIN 中定义的变量(因为玩家所在的平台位于 main 中,这需要更改 sprites 中定义的控件),但是如果我做一个

from MAIN import *

这似乎完全打破了联系。请帮忙

编辑:好的,目前我的文件太大,无法在此处发布所有代码,但我会尝试在此处发布相关内容(第一次在这里)。这是主“titleMAIN”文件的开始

import pygame as pg
import random
from titleSETTING import *
from titleSPRITE import *
cont = ("green")
class Game:
    def __init__(self):
        # initialize game window, etc
        pg.init()

等等从 Game 类调用 SPRITES 文件中的 Player 类 - 我需要能够在 Player 类中使用“cont”变量:

def new(self):
    # start a new game
    cont = ("green")
    ...
    self.player = Player(self)
    self.all_sprites.add(self.player)

这里是我试图从 SPRITES 文件中调用 MAIN 文件的地方:

from titleSETTING import *
...

class Player(pg.sprite.Sprite):
    def __init__(self, game):

对不起,我含糊不清,第一次来这里,有点编码新手,不管我多么喜欢它。顺便说一句,文件是指同一文件夹中的不同 python (.py) 文件 - 使用 IDLE 作为 IDE,这很糟糕,但这就是我得到的

编辑2:感谢您的回复-我意识到最好尝试将所有文​​件都制作成一个文件而不是两个文件,以免使代码过于复杂,因此我现在将采用这种心态

标签: python

解决方案


这对您不起作用的主要原因是循环导入存在问题。如果某个文件 A 导入了某个其他文件 B,那么您不希望 B 导入 A(即使是间接地,通过其他一些文件)。

所以为了让它工作,我把 main 分成两部分。

顺便说一句,使用全局变量(和 import *)往往会使程序更难阅读。与其使用一堆全局变量,不如考虑一个具有您需要的值作为字段的全局变量。而不是 import *,考虑显式导入(只是import sprites,然后sprites.foo)。

主要.py:

from sprites import *
from config import *

print "Hello from main. main_value is: ", main_value
print "sprite value is: ", sprite_value
do_sprite()

精灵.py:

from config import *
sprite_value=10

def do_sprite():
  print "main value is: ", main_value

配置文件:

main_value=5

推荐阅读