Python 脚本应该把类全部写在一个文件中还是分模块写? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
zhangchioulin
V2EX    Python

Python 脚本应该把类全部写在一个文件中还是分模块写?

  •  
  •   zhangchioulin 2017-11-03 13:48:19 +08:00 8415 次点击
    这是一个创建于 2908 天前的主题,其中的信息可能已经有所发展或是发生改变。
    事情是这样的:
    最新写一个脚本,随着功能的增加脚本已经 1500 行了。
    这么多行是因为我把每个功能都写在了同一个文件中(这些功能没有相互依赖,但却是完成脚本功能必不可少的一部分)。
    以前写别的语言(Objc)的时候习惯一个文件一个类,写 Python 的时候发现前辈写的脚本喜欢把类全部丢到一个文件中。
    所以现在比较晕,不知道要不要拆出来,不拆的话很多行感官上不太习惯,拆的话好像不太常看到这样写的?
    Python 小白看得代码不够多,Google 也没找到具体的答案,于是来问一下‘到底要不要拆’。
    我的观点是:拆出来,虽然麻烦些,但是这样看起来很整齐。
    32 条回复    2019-04-24 18:31:31 +08:00
    zyp0921
        1
    zyp0921  
       2017-11-03 13:52:30 +08:00
    拆啊 这部废话吗
    takanasi
        2
    takanasi  
       2017-11-03 13:52:34 +08:00 via Android
    最好分开
    zhangchioulin
        3
    zhangchioulin  
    OP
       2017-11-03 13:53:44 +08:00
    @takanasi #2
    @zyp0921 #1
    我也是这样想的。。。全写在一起看起来太。。。都对不起我的职称
    cljnnn
        4
    cljnnn  
       2017-11-03 13:53:54 +08:00 via Android
    这不是一道送分题吗?
    TimePPT
        5
    TimePPT  
    PRO
       2017-11-03 13:55:28 +08:00 via iPhone
    易于维护拆开写,自用随便……
    zhangchioulin
        6
    zhangchioulin  
    OP
       2017-11-03 13:55:28 +08:00
    恩!拆开
    superhan
        7
    superhan  
       2017-11-03 14:54:23 +08:00 via Android
    写在一起的原因我想是 部署方便吧
    BBCCBB
        8
    BBCCBB  
       2017-11-03 14:59:21 +08:00
    推荐拆
    LokiSharp
        9
    LokiSharp  
       2017-11-03 15:04:27 +08:00 via iPhone
    不拆,没必要拆
    zhangchioulin
        10
    zhangchioulin  
    OP
       2017-11-03 15:04:33 +08:00
    @superhan 是的写在一起就是为了部署方便
    zhangchioulin
        11
    zhangchioulin  
    OP
       2017-11-03 15:05:16 +08:00
    @LokiSharp 不拆会造成以后甩锅被人骂吧。。。
    iiduce
        12
    iiduce  
       2017-11-03 15:08:07 +08:00
    以舒适为准。发现不适的时候,越早改变越好。
    clino
        13
    clino  
       2017-11-03 15:10:20 +08:00   1
    其实如果在一个文件里面拆成各种类和函数,也可以做得比较规整的

    如果需要可重用性高特别是给别人用,那做成模块就好就拆成不同的文件
    loveCoding
        14
    loveCoding  
       2017-11-03 15:13:28 +08:00
    量大了也不太好
    knva
        15
    knva  
       2017-11-03 15:13:35 +08:00
    才 1500 行,不拆,就不拆
    hsuan
        16
    hsuan  
       2017-11-03 15:15:25 +08:00 via Android
    如果是工具类脚本,我觉得没有拆的必要
    CSM
        17
    CSM  
       2017-11-03 15:20:43 +08:00 via Android
    要是有些类 /函数比较独立,拆出来下次重用方便些 :P
    goldenalex
        18
    goldenalex  
       2017-11-03 15:25:27 +08:00   1
    功能拆分出来,你的能力才能提升,说不准哪一天拆着拆着就成了一个工具包。。。
    iFlicker
        19
    iFlicker  
       2017-11-03 15:45:48 +08:00
    既然它还是一个脚本的话,建议不,
    可以选择重构,让其结构清晰,写上简洁易懂的注释,然后在开头写上 使用和维护说明
    LokiSharp
        20
    LokiSharp  
       2017-11-03 15:50:05 +08:00 via iPhone
    @zhangchioulin 维护性的话,有空拆包不如把文档和注释写写好 1500 行的代码不算多
    LokiSharp
        21
    LokiSharp  
       2017-11-03 16:05:23 +08:00 via iPhone   1
    Python 没必要一个文件一个 Class,Python 里文件是 Module,可以包含多个 Class
    billion
        22
    billion  
       2017-11-03 16:15:59 +08:00
    我认为你这个前辈,可能只是年龄大一些,其他地方都不如你。

    如果不是一次性用的小脚本,显然要拆开。
    lengyihan
        23
    lengyihan  
       2017-11-03 16:36:00 +08:00 via Android
    模块化,能方便管理复用啊,
    TheCure
        24
    TheCure  
       2017-11-03 16:44:10 +08:00
    好了, 看到楼上这么多都没有说到点子上
    用 go 写脚本 随你怎么拆, 编译好一个 binary 丢到服务器上 完美
    jamesliu96
        25
    jamesliu96  
       2017-11-03 16:46:27 +08:00
    模块化的优点在于方便功能开发和管理、维护、复用,如果没这方面的需求写一个文件里,优点是便携。
    Tink
        26
    Tink  
    PRO
       2017-11-03 16:46:38 +08:00 via iPhone
    小项目的话可以把通用函数都写到一个文件里,特殊的拆开,大项目建议都拆了,不然容易挨骂
    hcnhcn012
        27
    hcnhcn012  
       2017-11-03 17:15:05 +08:00 via iPhone
    拆啊,拆了之后对代码重复利用和维护性方面都好
    kaneg
        28
    kaneg  
       2017-11-03 19:23:36 +08:00 via iPhone
    可以按照模块拆,而不是按照 Java 那样一个类一个文件,否则过犹不及。
    860670496
        29
    860670496  
       2017-11-03 19:42:22 +08:00
    拆,拆完了还能给说明文档和工作日志多水点字数呢
    lolizeppelin
        30
    lolizeppelin  
       2017-11-03 20:39:16 +08:00 via Android
    运维写的代码吧 233
    spotfg
        31
    spotfg  
       2019-04-04 09:40:01 +08:00   1
    不考虑重复使用部分就不拆,多个文件重复使用某一个类或者函数就拆那部分就好了
    autogen
        32
    autogen  
       2019-04-24 18:31:31 +08:00
    全部写在 main 里面也是可以的,我们那会儿玩 ACM 的时候就是这么干的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3287 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 11:48 PVG 19:48 LAX 04:48 JFK 07:48
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86