在init.py中循环

2024-04-29 08:53:04 发布

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

我在文件夹中有一个__init__.py文件。内容如下:

from .user import UserManager
from .user_group import UserGroupManager

__all__ = [
    "UserManager",
    "UserGroupManager",
]

事实上,管理者的名单要大得多,但这只会使问题变得复杂。现在我想回顾一下我得到的所有经理。有没有一种方法可以循环使用这个__init__.py文件?我没有应用程序中其他地方所有可能的管理器的列表,只有在这个init文件中

我想在service.py文件中执行类似的操作:

def get_manager_by_id(id: str):
    for manager in managers.__all__:
        # use the manager

但这会引发一个错误,即管理器是一个字符串,这是逻辑。 这里的解决方案是用字符串找到经理,还是有更好的方法


Tags: 文件方法字符串frompyimportid管理器
1条回答
网友
1楼 · 发布于 2024-04-29 08:53:04

我可以想出两种合理的方法来做到这一点。我倾向于:

# __init__.py
from .user import UserManager
from .user_group import UserGroupManager

MANAGERS = [UserManager, UserGroupManager]

__all__ = [
    "UserManager",
    "UserGroupManager",
]

# service.py
def get_manager_by_id(id: str):
    for manager in managers.MANAGERS:
        # use the manager

它的优点是,如果您想向__init__.py添加其他内容(实用程序函数、常量、非管理器的类…),它不会干扰get_manager_by_id

或者,您可以执行以下操作:

# __init__.py remains as you wrote it

# service.py
def get_manager_by_id(id: str):
    for manager_name in managers.__all__:
        manager = getattr(managers, manager_name)
        # use the manager

。。。但是,如果您想向包中添加其他内容,那么现在您必须检查manager是否以某种方式实际上是一个管理器类

相关问题 更多 >