如何导入差异python中的一种嵌套文件夹文件

时间:2018-11-06 13:41:28

标签: python oop python-import

[结构]

 Root
  |_ app
      |_util
          |_ log.py
      |_config.py
  |_ run.py

[run.py]

#import sys
#import os
#sys.path.insert(0, os.path.abspath('.'))

from app.config import Config

class App(object):
    def __init__(self):
        pass

    def run(self):
        Config.set_code(200)
        Config.print_code()

if __name__ == '__main__':
    app = App()
    app.run()

[config.py]

from app.util.log import Log

class Config(object):
    code = None
    def __init__(self):
        pass

    @classmethod
    def set_code(cls, code):
        cls.code = code    

    @classmethod
    def get_code(cls):
        return cls.code

    @classmethod
    def print_code(cls):
        Log.msg()

[log.py]

from app.config import Config

class Log(object):
    def __init__(self):
        pass

    @classmethod
    def msg(cls):
        code = Config.get_code()
        print('Code is: %r' % code)    

[当前输出]

File "C:\works\workout\tmp\app\util\log.py", line 1, in <module>
    from app.config import Config

ImportError: cannot import name 'Config' from 'app.config' (C:\works\workout\tmp\app\config.py)

[预期输出]

Code is: 200

另一个疑问,有什么方法可以将根导入修复为“ app”,然后通过该文件夹/子文件夹文件(任何深度)中的任何内容进行访问,

[app / sub1 / a.py]

 from app.util.xx import XX
 **from app.a import A**
 from app.aaa.bb import BB

 A.some_fn()

[app / a.py]

 from app.util.xx import XX
 **from app.sub1.a import A**
 from app.aaa.bb import BB 

 A.some_fn()

[app / sub1 / sub2 / a.py]

 **from app.sub1.a import A**
 **from app.sub1.sub2.b import B**
 from app.aaa.bb import BB 

 A.some_fn()

如果有任何建议或想法,请! 预先感谢,

1 个答案:

答案 0 :(得分:0)

log.pyconfig.py之间的循环依赖性是问题所在。很多时候可以避免循环依赖。所以我建议先尝试一下。

但是,如果要使用循环依赖性,可以按照here所述进行操作。

对于您的解决方案,它看起来像这样。适应log.py

from app.config import Configimport app.config

code = Config.get_code()code = app.config.Config.get_code()