【问题标题】:Working with multiple code files and folders in Python在 Python 中处理多个代码文件和文件夹
【发布时间】:2011-05-15 21:18:56
【问题描述】:

我是 Python 新手,我还没有想出一种简单的方法来分隔多个代码文件和文件夹中的代码。

我今天要做的是:为每个文件夹创建一个__init__.py 文件。有时它是空的。我不知道我为什么这样做,但似乎有必要。这是与使用 C# 的第一个区别。

第二个区别是任何文件要引用另一个文件,我必须使用导入,例如from model.table import Table。如果我有多个引用,我需要使用多个导入:

from model import table1,table2

然后在代码的其余部分我必须使用 table1.Table1 每个示例。如果我不想,我应该这样做

from model.table1 import Table1
from model.table2 import Table2

然后我可以简单地使用Table1

这与我在 C# 中习惯的差别太大了,在 C# 中,如果所有文件都在同一个命名空间中,我们不必import。有更简单的方法吗?

【问题讨论】:

    标签: python import


    【解决方案1】:

    您应该阅读模块:http://docs.python.org/tutorial/modules.html

    基本上,我认为您的代码组织不正确。在 Python 中,目录和文件是有意义的;这不仅仅是您写入文件的内容。对于每个新目录(带有__init__.py)和每个新文件,您都会创建一个新的“命名空间”......

    如果你有文件/mydatabase/model.py 以及在model.py 文件中定义的Table1Table2 等,您可以简单地:

    from mydatabase.model import *
    

    不要为每个Table 类创建新文件!

    【讨论】:

      【解决方案2】:

      据我了解,python 导入系统与 C# 的命名空间非常相似。如果你真的想要,你可以在__init__.py 中自定义模块的导入行为。您还可以使用import *from x import * 将模块定义的所有公共对象拉入当前命名空间。

      在 C# 中考虑:

      using System;
      Console.WriteLine("hello world!");
      

      在 python 中,您可以这样做(使用这种完全人为的情况):

      system/
      system/__init__.py
      system/console.py
      

      __init__.py:

      import console
      

      system/console.py:

      import sys
      
      def write_line(s):
          sys.stdout.write(s)
      

      现在在你的 python 代码中你可以这样做:

      from system import *
      console.write_line('hello world!')
      

      然而,这在 Python 中通常被认为不是一个好主意。有关更多详细信息和好的建议,请查看这篇文章:http://effbot.org/zone/import-confusion.htm

      【讨论】:

        猜你喜欢
        • 2017-08-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-07
        • 2016-10-23
        • 2017-06-18
        • 2021-06-04
        相关资源
        最近更新 更多