我有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作为函数调用的参数传递,有太多的函数依赖于它是合理的.我们希望避免使用全局变量,并尽可能在类下进行引用.
最好的方法是什么?
我真的不想改变一切.
(......)
最好的方法是什么?
我讨厌打破这个,但最好的方法是重构代码; 即,改变周围的事物.你不想要循环依赖,从长远来看,它们会让你的生活变得艰难.到目前为止,分层(树或DAG结构)模块设置是最容易处理的.
实现这一目标的最简单方法是将三个模块合并为一个,然后将一些内容移回单独的模块中.
| 归档时间: |
|
| 查看次数: |
482 次 |
| 最近记录: |