1、self是什么,一般都说指对象本身,这样说了没了用,说了后还是很难懂,因为这样说了后,仍然完全搞不清楚,什么时候变量前需要加self,什么时候不需要加self。

造成很多人,已经怕了self,不停地测试,加self减self来测试代码,或者干脆不知道要不要self,所有变量前面一律加self,这样就能瞎猫碰死老鼠了,但不弄清楚,长期这样做法有点悲剧。

2、所以不需要这么去想self代表对象本身,换个思维应该认为self是全局变量,如果变量前面加了self,那么在任何实例方法(非staticmethod和calssmethod)就都可以访问这个变量了,如果没有加self,只有在当前函数内部才能访问这个变量。

3、根据pep8,所有的加了self的变量,需要确保是在__init__中首次出现,这是因为和java不一样,python没有成员声明,python一下子很难知道有哪些成员变量,所以最好确保所有带self前缀的变量是在__init__中首次出现。这条规则可以使用pycahrm的静态检查来证实或者pylint工具来证明。

4、重中之重就是前缀带self的变量,就是在整个类的代码块里面类似是作为全局变量,这样想后就不会出现不知道要不要self或者瞎全加self。

5、错误的例子就是这样,比如unitetst用例里面:

def test_login(self):

self.url = xxx

self.resp = self.session.get(self.url)

self.text = self.resp.text

self.status = self.resp.statuscode

要加这么多self干鸟。这些都是局部的,别的方法里面不需要访问这些变量,完全是需要去掉这些self。

除了session属性需要共用以外,其他都要去掉,不然造成很大的误导,会以为这些变量也需要在其他方法中去使用它。

6、叫this或者任何其他的也可以,但是self是pycharm自动补全出来的,没必要再手动修改搞成this。

class A():

def __init__(self,x):

self.x = x

def show(this):

print(this.x)

A(1).show()

7、为什么不直接在类下面写,然后使用类方法cls.xxx访问,self和cls区别?

类属性是所有实例共享一份,需要看情况,需要多实例并且属性互不干扰需要使用self,需要所有实例保持使用同一个属性使用类属性。

一个类的多个实例就相当于一个模块的无限复制,但这些实例(伪模块)的内部状态(全局变量)是存在多份的,互不干扰的,这是使用面向对象很大的一个优点。模块和类的实例可以比较,拿函数和类比区别,简直是问得牛头不对马嘴的伪问题,就是问吃饭和人有什么区别 嘴巴和人有什么区别一样,问人和猪有什么区别才值得回答。

8.如果代码没有使用面向对象封装,只是有class外壳,那就直接写成函数好了,没有slef的困扰。否则即使写了class 类也是无效装逼废物类,这种类是怎么样的,需要怎么改变成有效面向对象类,需要看面向对象四步走里面的博客

上面说的是从思想上面怎么判断力一个类是不是无效废物类,那么从代码层面如何判断呢?很简单吧所有类的方法上加上@classmethod,所有代码还能正常直接运行,这种情况下,除了需要作为纯工具类以外,9成9就是无效废物类类,这种调用 类名 + 方法不如直接写成 模块 + 函数来调用。

贴一个无效废物类,里面没有成员变量也没有调用成员变量

就算是吧add方法和print_something方法换成静态方法,稍微说得过去,如果类里面没有其他方法和成员变量和实例方法,那也算无效装逼废物滑稽类。

python属性前为何要加self_python什么时候加self,什么时候不加self相关推荐

  1. python 字符串前加r b u f 含义

    python 字符串前加r b u f 含义 文章目录: 一.字符串前加 `r` 二.字符串前加 `b` 三.字符串前加 `u` 四.字符串前加 `f` 五.Python3.x中字符串转换成字节类型 ...

  2. python字符串前加“u、r、b、f”的作用

    转自: python字符串前加"u.r.b.f"的作用_嫣夜来的博客-CSDN博客

  3. python字符串前面加f什么意思,浅析python字符串前加r、f、u、l 的区别

    先给大家介绍下Python 字符串前面加u,r,b,f的含义(字符串前缀) 1.字符串前加 u 例:u"我是含有中文字符组成的字符串." 作用: 后面字符串以 Unicode 格式 ...

  4. python 字符串前加‘f‘ ‘r‘ ‘b‘ ‘u‘作用

    python字符串前的修饰 字符串前加 f 字符串前加 r 字符串前加 b 字符串前加 u 字符串前加 f 以 f开头表示在字符串内支持大括号内的python 表达式 print(f'{name} d ...

  5. 学python需要学数据库吗-学习Python爬虫前,你必须知道的一些工具!

    原标题:学习Python爬虫前,你必须知道的一些工具! 许多小伙伴在学习了一段时间的Python后,开始上手爬虫项目了,作为一个总算掌握了基础,开始向上进阶的Python小白,在做爬虫的时候肯定会遇到 ...

  6. python属性_python属性定义

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 在java里, 若要为一个类定义只读的属性, 只需要将目标属性用private修 ...

  7. python对语音信号读取、分帧、加窗

    python对语音信号读取.分帧.加窗 一.读入音频信号 语音信号有三个重要的参数:声道数.取样频率和量化位数. 声道数:单声道或者双声道 采样频率:一秒钟对声音采样的次数,例如10000HZ代表一秒 ...

  8. 01_01 python机器学习_第一章学习内容整理_加载样本数据绘制散点图

    第一章学习内容整理_加载样本数据&绘制散点图 01 常用包说明 python可以解决很多问题,相应解决方案使用的包也很多,不太好记忆. 为了便于记忆,用大白话简单描述一下各个包的功能. # 科 ...

  9. 快速掌握Python的捷径-Python基础前传(1)

    文: jacky(朱元禄) 开文序 最近看新闻,发现高考都考Python了,随着人工智能的火热,学数据科学的人越来越多了!但对于数据行业本身来说,现象级的火热,这并不是什么好事.  方丈高楼平地起,无 ...

最新文章

  1. 说实话,去一家小公司从 0 到 1 搭建后端架构,真难~
  2. java刷新操作_java实现删除某条信息并刷新当前页操作
  3. android自定义布局的使用!
  4. 浅谈个性化推荐系统中的非采样学习
  5. boost::math模块使用词法转换的一个非常简单的例子的测试程序
  6. LiveVideoStack线上分享第三季(九):《街舞》《长安十二时辰》背后的文娱大脑...
  7. 哪一个不是linux常用的shell,Linux下查看使用的是哪种shell的方法汇总
  8. 读《爱的艺术》书评而问
  9. Spring学习总结(26)——Spring事务原理详解
  10. 夺命雷公狗TP3.2.3商城16-----无限极分类删除(玩法1:有子级分类的不能删除)...
  11. Python脚本访问子目录
  12. Docker 如何支持多种日志方案?- 每天5分钟玩转 Docker 容器技术(88)
  13. GCD and LCM HDU 4497 数论
  14. 图神经网络-图游走类模型-作业
  15. 阅读笔记0001之聊聊数据分析现状
  16. css去掉滚动条,修改滚动条样式
  17. iPhone 短信欺骗漏洞披露,伪造短信号码、自定义短信手机号
  18. win98计算机系统硬件配置,Windows98操作系统优化实战(1) -电脑资料
  19. Topaz Gigapixel AI 5.3.1 智能图像无损放大软件汉化版
  20. 如何给自己的nginx服务设置管理密码

热门文章

  1. 王叁寿受邀新华社文津研讨会,建言“大数据如何激发新动能”
  2. 数据分析框架:实现99%准确率
  3. 用DELPHI开发简繁体应用软件的技巧
  4. 老婆变心了如何挽回老婆
  5. 计算机组策略无法编辑,组策略编辑器无法使用了,怎么办?
  6. 3D乌托邦:论CRPG游戏的浸没体验
  7. Android源码之陌陌项目源码
  8. SQL表中存储计算公式,直接执行
  9. java版商城源码之商家中心Spring Cloud+Spring Boot+mybatis+security+uniapp+Redis+MQ+VR全景+b2b2c多商家入驻前后端分离商城源码
  10. 基于深度学习的可解释特征准确预测混凝土抗压强度