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
thekoc
V2EX  ›  Python

Pycharm 说所有的 attribute 都要在 __init__ 里定义?

  •  
  •   thekoc · 2016-07-02 21:56:12 +08:00 · 11189 次点击
    这是一个创建于 3103 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如果你不这么做, 它会抱怨: Instance attribute xxx defined outside init

    这是正确的做法么? 比如在写一个界面的时候, init 里就会有许许多多的代码来初始化界面, 这个时候更好的办法难道不是把它们分散到好几个不同的函数中去初始化么?

    9 条回复    2016-07-03 22:20:52 +08:00
    justou
        1
    justou  
       2016-07-02 22:09:24 +08:00
    在 settings > editor > inspections > python 里面各种开关可以自己勾选, 有些勾上还是挺有用的, 例如要写兼容 py2,py3 的代码
    petelin
        2
    petelin  
       2016-07-02 22:11:51 +08:00 via Android
    我觉得他的意思是所有的变量都得在 init 函数里声明。这样确实更好。不会出现调用未创建的变量。你把函数分开然后也都在 init 里调用道理一样的。
    shyling
        3
    shyling  
       2016-07-02 22:19:51 +08:00
    意思是最少在__init__里定义一个名字,在其他方法使用时就至少不会不存在
    LPeJuN6lLsS9
        4
    LPeJuN6lLsS9  
       2016-07-02 22:32:46 +08:00
    分散掉的那几个函数如果仅仅是在__init__里调用的话何必分散?可以把它们全塞进 init ,然后用# -------- 某功能 --------这样的注释和几个空行隔开。视觉效果不比分散差
    thekoc
        5
    thekoc  
    OP
       2016-07-02 23:03:26 +08:00
    @shyling 定义一个名字的意思是说赋值 None 么?
    VicYu
        6
    VicYu  
       2016-07-03 00:32:20 +08:00
    PyCharm 上有很多很实践的提示,可以多勾选试试
    lowzoom
        7
    lowzoom  
       2016-07-03 10:26:01 +08:00
    构造方法里做赋值以外的事情,是 bad smell ,会降低代码的可测试性
    thekoc
        8
    thekoc  
    OP
       2016-07-03 17:24:54 +08:00 via iPad
    @lowzoom 那难道正确的做法是在 init 里赋值但是在子函数里去做初始化操作?这不就成了 cpp 了…
    lowzoom
        9
    lowzoom  
       2016-07-03 22:20:52 +08:00
    @thekoc 非也,根据 SRP 原则,你这个类本来就会承担某个界面逻辑,那么它就不应该再承担“初始化”的职责,初始化的工作应该在另一个单独的类中完成,也就是烂大街的“工厂模式”,这样能让代码更可测(也就是更好写单元测试)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1089 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 19:09 · PVG 03:09 · LAX 11:09 · JFK 14:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.