如果你不这么做, 它会抱怨: Instance attribute xxx defined outside init
这是正确的做法么? 比如在写一个界面的时候, init 里就会有许许多多的代码来初始化界面, 这个时候更好的办法难道不是把它们分散到好几个不同的函数中去初始化么?
1
justou 2016-07-02 22:09:24 +08:00
在 settings > editor > inspections > python 里面各种开关可以自己勾选, 有些勾上还是挺有用的, 例如要写兼容 py2,py3 的代码
|
2
petelin 2016-07-02 22:11:51 +08:00 via Android
我觉得他的意思是所有的变量都得在 init 函数里声明。这样确实更好。不会出现调用未创建的变量。你把函数分开然后也都在 init 里调用道理一样的。
|
3
shyling 2016-07-02 22:19:51 +08:00
意思是最少在__init__里定义一个名字,在其他方法使用时就至少不会不存在
|
4
LPeJuN6lLsS9 2016-07-02 22:32:46 +08:00
分散掉的那几个函数如果仅仅是在__init__里调用的话何必分散?可以把它们全塞进 init ,然后用# -------- 某功能 --------这样的注释和几个空行隔开。视觉效果不比分散差
|
6
VicYu 2016-07-03 00:32:20 +08:00
PyCharm 上有很多很实践的提示,可以多勾选试试
|
7
lowzoom 2016-07-03 10:26:01 +08:00
构造方法里做赋值以外的事情,是 bad smell ,会降低代码的可测试性
|
8
thekoc OP @lowzoom 那难道正确的做法是在 init 里赋值但是在子函数里去做初始化操作?这不就成了 cpp 了…
|
9
lowzoom 2016-07-03 22:20:52 +08:00
@thekoc 非也,根据 SRP 原则,你这个类本来就会承担某个界面逻辑,那么它就不应该再承担“初始化”的职责,初始化的工作应该在另一个单独的类中完成,也就是烂大街的“工厂模式”,这样能让代码更可测(也就是更好写单元测试)
|