python什么时候加self,什么时候不加self
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 类也是无效装逼废物类,这种类是怎么样的,需要怎么改变成有效面向对象类,需要看面向对象四步走里面的博客
关于pythoh面向过程开发人员三步转面向对象的补充,再加一步,四步走战略。转面向对象也可以有固定公式。
。
上面说的是从思想上面怎么判断力一个类是不是无效废物类,那么从代码层面如何判断呢?很简单吧所有类的方法上加上@classmethod,所有代码还能正常直接运行,这种情况下,除了需要作为纯工具类以外,9成9就是无效废物类类,这种调用 类名 + 方法不如直接写成 模块 + 函数来调用。 贴一个无效废物类,里面没有成员变量也没有调用成员变量

就算是吧add方法和print_something方法换成静态方法,稍微说得过去,如果类里面没有其他方法和成员变量和实例方法,那也算无效装逼废物滑稽类。
python什么时候加self,什么时候不加self的更多相关文章
- Python调用函数加括号和不加括号的区别
Python调用函数加括号和不加括号的区别 # -*- coding: utf-8 -*- #!/usr/bin/env python # @Time : 2018/7/3 10:03 # @Desc ...
- self是什么?什么时候加?什么时候不加?
Python里边self倒底是什么?什么时候加self?什么时候不加? self是什么? 如果你问别人大多人回答是: 指对象本身,然后噼里啪啦说一堆,然后听完的你,仍然完全搞不清楚,什么时候变量前需要 ...
- python 怎么模拟加header(如User-Agent、Content-Type等等)
# -*- coding: cp936 -*- #python 27 #xiaodeng #python 怎么模拟加header(如User-Agent.Content-Type等等) #办法一: i ...
- SpringMVC路径问题回顾,加斜杠和不加斜杠的问题(六)
绝对路径:全的路径. 相对路径:有参照的路径. 加斜杠和不加斜杠的问题如下:(分前台和后台路径,明白这两个就知道什么意思了) 如果是页面,这个图片路径出现在jsp页面,所以是前台路径,前台路径的参照物 ...
- python列表可以加可以乘
python列表可以加可以乘 list=['abcd',786,2.23,'runoob',70.2] tinylist = [123,'runoob'] print(list) print(list ...
- jquery 调用函数时加()和不加()的执行顺序是不同的
编写JQUERY(3.0,向下兼容3.0)代码当我们调用一个函数时可以不加括号,但加括号与不加括号是不同的.如下代码: $(function(){ a(b);//先打印a 再打印 b a(b());/ ...
- mysql加单引号和不加单引号的性能比较
刚刚我们说过了,生活中难免会有一些不如意,比如,我们用一个字符串类型的字段来作为主键,表面上,这太不如意了,然而,事实也证明这是有用的.问题也就出来了,当在查询语句中对该字段值加上单引号和不加查询耗时 ...
- python 如何重新加载有修改过的模块(module)
写 Python 程序的时候,一边写模块一边调试.调试是在 Python 自身的命令行终端进行的.但当对模块里的代码进行修改后,在原调试终端上执行到模块中新修改上去的内容. 我之前是一直用退出再重新进 ...
- 利用python进行数据加载和存储
1.文本文件 (1)pd.read_csv加载分隔符为逗号的数据:pd.read_table从文件.URL.文件型对象中加载带分隔符的数据.默认为制表符.(加载为DataFrame结构) 参数name ...
随机推荐
- 编程菜鸟的日记-初学尝试编程-编写函数实现strcmp功能
#include <iostream>using namespace std;int mystrcmp(const char *str1,const char *str2){ assert ...
- Java 异常 重写抛出异常限制
1 子类在重写父类抛出异常的方法时,要么不抛出异常,要么抛出与父类方法相同的异常或该异常的子类.如果被重写的父类方法只抛出受检异常,则子类重写的方法可以抛出非受检异常.例如,父类方法抛出了一个受检异常 ...
- bzoj 1006
http://www.cnblogs.com/zxfx100/archive/2011/03/23/1993055.html https://wenku.baidu.com/view/07f4be19 ...
- react-navigation 中的多tabs嵌套时内部tabs无法正常切换问题
原因 问题应该是当用户滑动或切换时,无法判断是哪个tabs应该进行滑动切换和展示切换动画. 解决 swipeEnabled - 是否允许在标签之间进行滑动 animationEnabled - 是否在 ...
- javascript对样式的操作
js可实现用户对页面中的选择条件改变页面中的样式,页面样式可以通过style修饰,也可以通过css修饰,先来看一下js改变style样式,代码如下: 案例一: <!DOCTYPE html> ...
- swiper默认显示三个,中间放大且显示全部图片两边显示部分图片的实现方法
本页面内容最后的红色部分有惊喜哦! 最近在做一个活动页面,要求触摸切换图片时,默认在可视区域中显示三张图片,其中中间的一张图片比其他两张都大且全部显示,而其他两张图片只显示部分即可,于是就想到了swi ...
- WordPress主题开发:按分类调用文章
调用catid为2的分类下的文章,就是后台分类链接的tag_ID <?php $cat_query = new WP_Query(array( 'cat' => '2' )); ?> ...
- Sublime Text 显示韩文和文件编码
菜单 Preferences –> Settings 右侧的User { "font_size": 12, "show_encoding": ...
- hibernate JPA 使用懒加载时代理对象
hibernate延迟加载代理对象实际对象读取方式 public static <T> T deproxy (T obj) { if (obj == null) return obj; i ...
- QPS从0到4000请求每秒,谈达达后台架构演化之路(转载)
https://blog.csdn.net/czbing308722240/article/details/52350219 QPS从0到4000请求每秒,谈达达后台架构演化之路 达达是全国领先的 ...