问题 使用Python中的多个代码文件和文件夹


我是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#中的习惯有很大不同,如果所有文件都在同一名称空间中,我们没有必要 import。对我来说有更简单的方法吗?


6675
2018-05-15 21:18


起源



答案:


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

基本上,我认为你没有正确组织你的代码。使用python,目录和文件都有意义;它不仅仅是你写入文件的内容。每个新目录(带有 __init__.py)和每个新文件,你创建一个新的“命名空间”...

如果你有这个文件 /mydatabase/model.pyTable1Table2等等 model.py 文件你可以简单地:

from mydatabase.model import *

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


14
2018-05-15 21:49





根据我的理解,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


2
2018-05-15 21:47