博客已经搬家到“捕获完成”:
https://www.v2python.com
这是一个创建于 624 天前的主题,其中的信息可能已经有所发展或是发生改变。
如果你不这么做, 它会抱怨: Instance attribute xxx defined outside init
这是正确的做法么? 比如在写一个界面的时候, init 里就会有许许多多的代码来初始化界面, 这个时候更好的办法难道不是把它们分散到好几个不同的函数中去初始化么?
3217 次点击
attribute init__ 初始 defined
9 回复 | 直到 2016-07-03 22:20:52 +08:00
![]() |
![]() 在 settings > editor > inspections > python 里面各种开关可以自己勾选, 有些勾上还是挺有用的, 例如要写兼容 py2,py3 的代码 |
![]() |
![]() 我觉得他的意思是所有的变量都得在 init 函数里声明。这样确实更好。不会出现调用未创建的变量。你把函数分开然后也都在 init 里调用道理一样的。 |
![]() |
![]() 意思是最少在__init__里定义一个名字,在其他方法使用时就至少不会不存在 |
![]() |
![]() 分散掉的那几个函数如果仅仅是在__init__里调用的话何必分散?可以把它们全塞进 init ,然后用# -------- 某功能 --------这样的注释和几个空行隔开。视觉效果不比分散差 |
![]() |
![]() @shyling 定义一个名字的意思是说赋值 None 么? |
![]() PyCharm 上有很多很实践的提示,可以多勾选试试 |
![]() 构造方法里做赋值以外的事情,是 bad smell ,会降低代码的可测试性 |
![]() |
![]() @lowzoom 那难道正确的做法是在 init 里赋值但是在子函数里去做初始化操作?这不就成了 cpp 了… |
![]() @thekoc 非也,根据 SRP 原则,你这个类本来就会承担某个界面逻辑,那么它就不应该再承担“初始化”的职责,初始化的工作应该在另一个单独的类中完成,也就是烂大街的“工厂模式”,这样能让代码更可测(也就是更好写单元测试) |
Pycharm 说所有的 attribute 都要在 __init__ 里定义?
thekoc · 2016-07-02 21:56:12 +08:00 · 3218 次点击
这是一个创建于 624 天前的主题,其中的信息可能已经有所发展或是发生改变。
如果你不这么做, 它会抱怨: Instance attribute xxx defined outside init
这是正确的做法么? 比如在写一个界面的时候, init 里就会有许许多多的代码来初始化界面, 这个时候更好的办法难道不是把它们分散到好几个不同的函数中去初始化么?