我是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
。对我来说有更简单的方法吗?
答案 0 :(得分:14)
您应该阅读模块:http://docs.python.org/tutorial/modules.html
基本上,我认为您没有正确组织代码。使用python,目录和文件都有意义;它不仅仅是你写入文件的内容。对于每个新目录(使用__init__.py
)和每个新文件,您都会创建一个新的“命名空间”......
如果您有文件/mydatabase/model.py
以及Table1
文件中定义的Table2
,model.py
等,您可以简单地:
from mydatabase.model import *
不要为每个Table
类创建新文件!
答案 1 :(得分: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