2011-05-15 44 views
11

我是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。对我来说有一个更简单的方法吗?

回答

14

你应该在模块上读取了起来:http://docs.python.org/tutorial/modules.html

基本上,我想你是不是组织代码的权利。用python,目录和文件有意义;这不仅仅是你写入文件的内容。随着每个新目录(与__init__.py)和每个新文件,你创建一个新的“命名空间”...

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

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

相关问题