我是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。 有没有对我来说更简单的方法?
您应该阅读以下模块:http://docs.python.org/tutorial/modules.html
基本上,我认为您没有正确组织代码。使用python,目录和文件具有含义;这不仅仅是您写入文件的内容。对于每个新目录(带有__init__.py)和每个新文件,您将创建一个新的"命名空间" ...
如果您有文件/mydatabase/model.py
以及在model.py文件中定义的Table1,Table2等,您可以简单地:
from mydatabase.model import *
不要为每个Table类创建一个新文件!
从我的理解来看,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