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

PyCharm警告实例属性定义在__init__之外,询问是否应遵循此做法。讨论中提到,在初始化大量界面代码时,将初始化分散到多个函数中可能是更好的组织方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

博客已经搬家到“捕获完成”:

https://www.v2python.com

 

  

这是一个创建于 624 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

3217 次点击  

加入收藏  Tweet  Weibo  忽略主题  

感谢

 attribute init__ 初始 defined

9 回复  |  直到 2016-07-03 22:20:52 +08:00

 

       

   Reply    1justou   2016-07-02 22:09:24 +08:00

在 settings > editor > inspections > python 里面各种开关可以自己勾选, 有些勾上还是挺有用的, 例如要写兼容 py2,py3 的代码

 

       

   Reply    2petelin   2016-07-02 22:11:51 +08:00 via Android

我觉得他的意思是所有的变量都得在 init 函数里声明。这样确实更好。不会出现调用未创建的变量。你把函数分开然后也都在 init 里调用道理一样的。

 

       

   Reply    3shyling   2016-07-02 22:19:51 +08:00

意思是最少在__init__里定义一个名字,在其他方法使用时就至少不会不存在

 

       

   Reply    4hantsuki   2016-07-02 22:32:46 +08:00

分散掉的那几个函数如果仅仅是在__init__里调用的话何必分散?可以把它们全塞进 init ,然后用# -------- 某功能 --------这样的注释和几个空行隔开。视觉效果不比分散差

 

       

   Reply    5thekoc   2016-07-02 23:03:26 +08:00

@shyling 定义一个名字的意思是说赋值 None 么?

 

       

   Reply    6VicYu   2016-07-03 00:32:20 +08:00

PyCharm 上有很多很实践的提示,可以多勾选试试

 

       

   Reply    7lowzoom   2016-07-03 10:26:01 +08:00

构造方法里做赋值以外的事情,是 bad smell ,会降低代码的可测试性

 

       

   Reply    8thekoc   2016-07-03 17:24:54 +08:00 via iPad

@lowzoom 那难道正确的做法是在 init 里赋值但是在子函数里去做初始化操作?这不就成了 cpp 了…

 

       

   Reply    9lowzoom   2016-07-03 22:20:52 +08:00

@thekoc 非也,根据 SRP 原则,你这个类本来就会承担某个界面逻辑,那么它就不应该再承担“初始化”的职责,初始化的工作应该在另一个单独的类中完成,也就是烂大街的“工厂模式”,这样能让代码更可测(也就是更好写单元测试)

 

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

  

   thekoc · 2016-07-02 21:56:12 +08:00 · 3218 次点击  

这是一个创建于 624 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值