4

例如:

 Files/ 
    main.py
    SubFileA/
        __init__.py              "from util1 import help"
        util1.py                 "def help(): print ...A..."
    SubFileB/
        __init__.py              "from util1 import help"
        util1.py                 "def help(): print ...B..."

并且 SubFileA 和 SubFileB 中的 util1.py 有不同的内容。

我希望有某种方式用户可以指定要导入的 util1.py。

我期待类似的东西:

  if subFileA:
       from SubFileA import *
  else:
       from SubFileB import *

util1.py 具有相同的 API,但实现不同。

我这样做的原因是,如果我将两个 util1.py 组合在一起,代码会变得丑陋且难以维护。希望任何人都可以给我一个解决方案,或者任何建议都会很棒!

我尝试了这些代码,但收到了警告(它确实有效,但警告令人尴尬):

main.py:4: SyntaxWarning: import * only allowed at module level
   def main():
main.py:4: SyntaxWarning: import * only allowed at module level
   def main():

每个人。我想我找到了解决方案。但我认为这不是好的编程风格。

Files/
   main.py                              "from directory import *"
   directory/
       __init__.py                      
                                        "user=raw_input() 
                                        if user: 
                                              from directoryA import *
                                        else
                                              from directoryB import * "
       directoryA/
           __init__.py                   "from util1 import help1()"
           util1.py 
       directoryB/
           __init__.py                   "from util1 import help1()"
           util1.py 

确实,这看起来很奇怪。但它完成了这项工作。

4

1 回答 1

1

您需要将每个目录制作成一个包才能使from <package> import ...语法正常工作。要告诉 Python 一个目录是一个包,只需在每个目录中创建一个空__init__.py文件。

如果您希望根据导入的版本进行特定行为,您可以在每个文件util1中编写初始化代码。__init__.py

有关更多信息,请查看有关 packages 的官方文档


最终,您的新项目目录树应如下所示:

Files/ 
    main.py
    SubFileA/
        __init__.py
        util1.py
    SubFileB/
        __init__.py
        util1.py
于 2012-05-23T19:32:36.040 回答