You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python代码结构:如何导出类而非模块以适配Ruby开发者习惯?

刚从Ruby转Python的话,确实会觉得Python的导入写法有点“啰嗦”,不过通过几个小配置就能改成你习惯的风格,我来一步步说清楚:

实现更简洁的导入方式

1. 让controllers.UserController()成为可能

Python的目录要被识别为包,需要在controllers目录下创建一个__init__.py文件(可以是空文件,但我们要利用它来简化导入)。

在<project root>/controllers/__init__.py中添加以下代码:

# 从当前包的user_controller模块导入UserController类
from .user_controller import UserController

这样一来,外部代码就可以这样导入和实例化:

import controllers
controller_instance = controllers.UserController()

# 或者更简洁的写法
from controllers import UserController
controller_instance = UserController()

这就和你习惯的Ruby模块调用方式很接近了。

2. 直接使用UserController()

如果想完全省略模块前缀,直接导入类本身,可以直接从具体模块导入:

from controllers.user_controller import UserController
controller_instance = UserController()

如果已经在controllers/__init__.py里导入了UserController,也可以用from controllers import UserController来实现同样的效果。

Python里的“导出”类逻辑

Ruby里有明确的导出机制,但Python的逻辑更直接:模块(.py文件)里的所有类、函数默认都是可以被外部导入的。不过如果你想明确指定哪些类是对外暴露的(类似Ruby的导出),可以在模块里定义__all__变量。

比如在<project root>/controllers/user_controller.py中:

# 指定当使用`from controllers.user_controller import *`时,会导入的内容
__all__ = ["UserController"]

class UserController:
    def index(self):
        # 你的业务逻辑
        print("User index page")

# 这个类不会被`import *`导入,相当于“私有”
class _InternalHelper:
    pass

这样,当别人用from controllers.user_controller import *时,只会拿到UserController,而_InternalHelper(通常用下划线开头表示私有)不会被导入,达到类似“导出指定类”的效果。

内容的提问来源于stack exchange,提问作者Niels B.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:26:58