Python类可以像模块一样工作吗?

2024-05-17 11:14:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在考虑这样设置一个包实现:

wordproc
    __init__.py
    _generic.py
    gedit.py
    oofice.py
    word.py

在_通用.py会有这样的课程:

^{pr2}$

这些可能会如图所示打印出来,或引发错误。特定于应用程序的模块只是_通用.py从_通用.WordProc. 通过这种方式,功能可以随着时间的推移迭代实现,关于未实现的事情的消息只会引发警报。在

我在想,u init_uuy.py可以查找以下内容(按顺序列出)以确定要使用哪个模块:

  1. wordproc模块变量
  2. 路径中的设置文件
  3. wordproc环境变量
  4. 试图确定环境的函数
  5. 一个默认的默认值(可能是_通用.py)在

我认为3可以是每个应用程序模块中的一个函数,或者这些函数可以放在带有特别命名的环境测试脚本的文件夹中(例如。环境保护),并且可以在它们上循环。在

我希望在任何希望使用wordproc的库中都能做到这一点:

import wordproc as wp

wp.createNewDoc()
etc...

我不知道的是如何让wp解析到正确的模块中的正确类,这是由u init_u.py决定的。这样做没有意义:

import wordproc.gedit as wp

这就破坏了让u init_uu.py确定要在wordproc中使用哪个模块这一点。我需要类继承之类的东西,但是在模块级别上。在


Tags: 模块函数pyimport环境initasgeneric
1条回答
网友
1楼 · 发布于 2024-05-17 11:14:34

您可以通过这样写__init__.py来达到您想要的效果:

  1. 首先导入适当的模块。有关动态导入的帮助,请参阅关于^{}^{}的python文档。在
  2. 实例化要从中导出方法的类
  3. 将实例方法分配给locals()
# import appropriate module as mod depending on settings, environment
# using importlib.import_module, or __import__

__all__ = []

_instance = mod.WordProc()
for attr in dir(_instance):
    if not attr.startswith('_') and callable(getattr(_instance, attr)):
        locals()[attr] = getattr(_instance, attr)

相关问题 更多 >