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

Python 3.6开发:如何划分主程序与类的代码范围?

如何划分主程序与类的代码?

这其实是个关于职责分离的经典问题,结合你开发的单词放置程序场景,我给你几个实用的判断维度,帮你理清边界:

1. 类要封装「核心实体的行为与状态」

你的程序里最核心的实体是单词网格,所有和这个实体相关的状态(比如网格尺寸、已放置单词的位置记录)、行为(随机选合法坐标、放置单词、绘制网格)都应该放进类里。

举个具体的例子:

  • 类里要有__init__方法来初始化网格的基本参数(比如尺寸)
  • 要有place_word方法,内部封装随机坐标生成、位置合法性校验、单词写入网格的逻辑
  • 要有draw_grid方法负责完成绘图的具体操作

把这些代码放进类的原因很直观:它们都围绕「网格」这个核心展开,封装后你后续要调整网格规则(比如改成矩形网格)或放置逻辑(比如支持斜向放单词),只需要修改类内部,不会影响主程序的流程。

2. 主程序负责「流程编排与外部交互」

主程序是整个程序的入口,要处理那些和核心实体无关的流程性、交互性工作,比如:

  • 读取文件中的单词列表(with open(...)这类文件操作)
  • 接收用户输入(比如让用户自定义网格大小)
  • 初始化你的网格类实例
  • 调用类的方法完成单词放置、绘图等核心任务
  • 处理程序的启动/收尾逻辑(比如捕获文件读取异常、输出运行结果)

比如主程序的代码大概会是这样:

if __name__ == "__main__":
    # 读取单词文件
    try:
        with open("words.txt", "r") as f:
            words = [line.strip() for line in f if line.strip()]
    except FileNotFoundError:
        print("单词文件未找到,请检查路径!")
        exit()
    
    # 初始化网格类
    word_grid = WordGrid(size=10)
    
    # 批量放置单词
    for word in words:
        if not word_grid.place_word(word):
            print(f"单词 {word} 无法放置,跳过")
    
    # 生成最终绘图
    word_grid.draw_grid()

3. 快速判断准则:「是否依赖类的状态」

如果一段代码需要频繁访问某个实体的状态(比如网格的已占用位置),那它就该放进类里;如果代码只是做「调度」,不需要记住任何实体状态,就留在主程序里。

比如你要是把「随机选坐标」的逻辑放在主程序,每次都得把网格尺寸、已占用位置传过去,代码会变得冗余又麻烦——但放在类里的话,类自己清楚当前的网格状态,处理起来简洁得多。

4. 考虑未来的扩展性

如果以后你想给程序加功能,比如支持导出网格为图片、添加不同的放置模式(横向/纵向),把这些逻辑放在类里会更容易扩展。主程序只需要调用新增的方法,不需要大幅修改结构。

总结一下:类是干具体活的「工具/实体」,主程序是安排任务的「指挥」,把两者的职责分清楚,代码会更清晰、更容易维护。

内容的提问来源于stack exchange,提问作者long_time_newbie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:50:33