Python导入父文件

Smu*_*dge 2 python import

我有3个文件,文件1导入文件2,文件2导入文件3和文件3需要在文件1中引用某些东西.一个基本的例子是

#---------------------File1.py---------------------
import File2

class core():
    def __init__(self):
        self.something = "Hello World"
        self.run = File2.run()

c = core()

#---------------------File2.py---------------------
import File3

class run():
    def __init__(self):
        self.somethingelse = "Cows"
        File3.func()

#---------------------File3.py---------------------
import File1

class func():
    print File1.c.something
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,File3需要访问File1中存在的变量'c.something',该变量是调用文件2的类的一部分,后者又调用文件3.

这是来自我已经"固有"的一段代码,其余代码非常复杂,所以我真的不想改变它.为了给出一个更现实的例子,这里基本上是实际代码的作用;

#---------------------File1.py---------------------
import File2
import config

class core():
    def __init__(self):
        self.config = config.load() #Config.load is an expensive DB opperation, and should only be run once
        self.run = File2.run()

c = core()

#---------------------File2.py---------------------
import File3

class run():
    def __init__(self):

        #
        # Do some things that don't require access to 'config'
        #

        File3.func()

#---------------------File3.py---------------------
import File1

class func():
    #Do some stuff that requires access to the config
    print File1.c.config['some config']
Run Code Online (Sandbox Code Playgroud)

我们只能调用config.load()一次,但许多函数必须能够访问它.我们也不能self.config作为函数调用的参数传递,有太多的函数依赖于它是合理的.我们希望避免使用全局变量,并尽可能在类下进行引用.

最好的方法是什么?

Fre*_*Foo 6

我真的不想改变一切.

(......)

最好的方法是什么?

我讨厌打破这个,但最好的方法是重构代码; 即,改变周围的事物.你不想要循环依赖,从长远来看,它们会让你的生活变得艰难.到目前为止,分层(树或DAG结构)模块设置是最容易处理的.

实现这一目标的最简单方法是将三个模块合并为一个,然后将一些内容移回单独的模块中.