我正在考虑这样设置的包实现:
wordproc
__init__.py
_generic.py
gedit.py
oofice.py
word.py
_generic.py 会有这样的类:
class WordProc (object):
def __init__ (self):
pass
def createNewDoc (self):
print "createNewDoc unimplemented in current interface"
def getWordCount (self):
print "getWordCount unimplemented in current interface"
etc...
这些可能会如图所示打印出来,或引发错误。特定于应用程序的模块将只是 _generic.py 的副本,其中 WordProc 类派生自 _generic.WordProc。通过这种方式,功能可以随着时间的推移迭代地实现,关于未实现事物的消息只会引发警报。
我想象 __init__.py 可以查找以下内容(按顺序列出)以确定要使用的模块:
- wordproc 模块变量
- 路径中的设置文件
- wordproc 环境变量
- 尝试确定环境的函数
- __init__.py 中的默认值(可能是 _generic.py)
我认为 3 可以是每个应用程序模块中的一个函数,或者这些可以进入具有特别命名的环境测试脚本(例如 env.py)的文件夹,并且 __init__.py 可以循环它们。
我想在任何想要使用 wordproc 的库中简单地做到这一点:
import wordproc as wp
wp.createNewDoc()
etc...
我不知道如何让 wp 解析到由 __init__.py 确定的正确模块中的正确类。这样做没有意义:
import wordproc.gedit as wp
这破坏了让 __init__.py 确定要使用 wordproc 中的哪个模块的意义。我需要类继承之类的东西,但是在模块级别。