python什么时候加self,什么时候不加self

Posted 北风之神0509

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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.getself.url)

     self.text = self.resp.text

     self.status = self.resp.statuscode

 

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

 

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

以上是关于python什么时候加self,什么时候不加self的主要内容,如果未能解决你的问题,请参考以下文章

面向对象基础

在java语言中,有时候变量常量声明时要加一个“static”,有的时候不加。问一下这个词有啥用

JS调用函数时啥时候加小括号()?啥时候不加小括号()?

python中的类中属性元素加self.和不加self.的区别

传参数给函数,啥时候需要取地址符?

python打印的时候print(f"*******") 的括号里的 f作用是什么 ?