我是靠谱客的博主 和谐哈密瓜,最近开发中收集的这篇文章主要介绍pycharm提示This inspection detects instance attribute definition outside __init__ method,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

示例代码:

class MiNiCarStore(CarStore):

    def createCar(self, typeName):
        self.carFactory = CarFactory()  # 会出现下划线提示This inspection detects instance attribute definition outside __init__ method
        return self.carFactory.createCar(typeName)

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

可改写如下:

class MiNiCarStore(CarStore):
	
	def __init__(self):
        self.carFactory = None
        
    def createCar(self, typeName):
        self.carFactory = CarFactory()
        return self.carFactory.createCar(typeName)

也可以在settings -> editor -> inspections -> python 取消勾选提示

扩展阅读

单一职责原则(Single Pesponsibility Principle, SRP)
单一职责有两个含义: 一个是避免相同的职责分散到不同的类中, 别一个是避免一个类承担太多职责
为什么要遵守SRP呢?

  • 可以减少类之间的耦合
    如果减少类之间的耦合,当需求变化时,只修改一个类,从而也就隔离了变化;如果一个类有多个不同职责,它们耦合在一起,当一个职责发生变化时,可能会影响到其他职责。
  • 提高类的复用性
    修改电脑比修理电视机简单多了。主要原因就在于电视机各个部件之间的耦合性太高,而电脑则不同,电脑的内存、硬盘、声卡、网卡、键盘灯等部件都可以很容易地单独拆卸和组装。某个部件坏了,换上新的即可。上面的例子就体现了单一职责的优势。由于使用了单一职责,使得‘组件’可以方便地‘拆卸’和‘组装’。
    不遵守SRP会影响对类的复用性。当只需要用该类的某一个职责时,由于它和其他的职责耦合在一起,也就很难分离出。
    遵守SRP在实际代码开发中有没有什么应用?有的。以数据持久层为例,所谓的数据持久层主要指的是数据库操作,当然,还包括缓存管理等。这时就需要数据持久层支持多种数据库。应该怎么做?定义多个数据库操作类?想法已经很接近了,再进一步,就是使用工厂模式。
    工厂模式(Faction)允许你在代码执行时实例化对象。它之所以被称为工厂模式是因为它负责‘生产对象’。以数据库为例,工厂需要的就是根据不同的参数,生成不同的实例化对象。最简单的工厂就是根据传入的类型名实例化对象,如传入MySQL,就调用MySQL类并实例化,如果是SQLite,则调用 SQLite的类并实例化,甚至还可以处理TXT、Execl等‘类数据库’。

转载于:https://www.cnblogs.com/weibgg/p/10786956.html

最后

以上就是和谐哈密瓜为你收集整理的pycharm提示This inspection detects instance attribute definition outside __init__ method的全部内容,希望文章能够帮你解决pycharm提示This inspection detects instance attribute definition outside __init__ method所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部