self是什么?什么时候加?什么时候不加?
Python里边self倒底是什么?什么时候加self?什么时候不加?
self是什么?
- 如果你问别人大多人回答是: 指对象本身,然后噼里啪啦说一堆,然后听完的你,仍然完全搞不清楚,什么时候变量前需要加self,什么时候不需要加self。造成很多人,已经怕了self,不停地测试,加self减self来测试代码,或者干脆不知道要不要self,所有变量前面一律加self,这样就能瞎猫碰死老鼠了,但不弄清楚,长期这样做法有点悲剧。
所以不需要这么去想self代表对象本身,换个思维应该认为self是全局变量。
- 如果变量前面加了self,那么在任何实例方法(非staticmethod和calssmethod)就都可以访问这个变量了
#! /usr/bin/python3
class Test():
"""变量在函数内部"""
def test_login(self):
# 变量在函数内部
self.word = "骑着乌龟赶猪"
def common(self):
# 打印会报错
print(self.word)
T = Test()
T.common()
***
#! /usr/bin/python3
class Test():
"""变量在函数外部,属公共的"""
word = "骑着乌龟赶猪"
def test_login(self):
# 正常打印
print(self.word)
def common(self):
# 正常打印
print(self.word)
T = Test()
T.common()
T.test_login()
- 如果没有加self,只有在当前函数内部才能访问这个变量
#! /usr/bin/python3
class Test():
"""调用方法中的私有属性"""
def test_login(self):
word = "骑着乌龟赶猪"
# 正确打印
print(word)
def common(self):
# 打印会报错
print(word)
T = Test()
T.test_login()
T.common()
- 类中方法如何调用
调用类中方法:self.方法名
#! /usr/bin/python3
class Test():
"""调用类中方法"""
def test_login(self):
print("调用登录方法")
def test_exit(self):
self.test_login()
T = Test()
T.test_exit()
如果对软件测试、接口测试、自动化测试、技术同行、持续集成、面试经验交流。感兴趣可以进到902061117,群内会有不定期的分享测试资料。
如果文章对你有帮助,麻烦伸出发财小手点个赞,感谢您的支持,你的点赞是我持续更新的动力。
self是什么?什么时候加?什么时候不加?的更多相关文章
- new对象时,类名后加括号与不加括号的区别
[1]默认构造函数 关于默认构造函数,请参见随笔<类中函数> 请看测试代码: 1 #include <iostream> 2 using namespace std; 3 4 ...
- C++中创建对象的时候加括号和不加括号的区别
c++创建对象的语法有----- 1 在栈上创建 MyClass a; 2 在堆上创建加括号 MyClass *a= new MyClass(); 3 不加括号 MyClass *a = new My ...
- 详解变量声明加 var 和不加 var 的区别
在全局作用域中声明变量加 var 关键字和不加 var ,js 引擎都会将这个变量声明为全局变量,在实际运行时,两种声明方式的变量的行为也是几乎一致的.但是在全局作用域下是否声明一个变量的 时候加va ...
- JS声明对象时属性名加引号与不加引号的问题
般情况下属性名加引号和不加引号是都可以的,效果是一样的. var obj = { name : '你好', 'age' : 1, }; document.write( obj['name'] + '& ...
- Java中主类中定义方法加static和不加static的区别
Java中主类中定义方法加static和不加static的区别(前者可以省略类名直接在主方法调用(类名.方法),后者必须先实例化后用实例调用) 知识点:1.Getter and Setter 的应用 ...
- js中加“var”和不加“var”的区别
JavaScript 拥有动态类型.这意味着相同的变量可用作不同的类型: var x // x 为 undefined var x = 6; // x 为数字 var x = "Bill&q ...
- 【转】new对象时,类名后加括号和不加括号的区别
请看测试代码: #include <iostream> using namespace std; // 空类 class empty { }; // 一个默认构造函数,一个自定义构造函数 ...
- onclick时间加return和不加return的区别
JAVASCRIPT在事件中调用函数时用return返回值实际上是对window.event.returnvalue进行设置. 而该值决定了当前操作是否继续.当返回的是true时,将继续操作.当返回是 ...
- 域名加www与不加www不一样结果的解决办法
有些浏览器域名访问加www 与不加www出现的页面不一样.在aj请求的时候也不同.firefox与google新版本的都会自动加上www. 比如 访问haitaohua.com,但aj请求的时候是带w ...
- iview table里面 插入下拉列表组件(自定义组件)一定要加key,不加key,table开始会加载所有数据,然后再从第2页点回第一页,就会走onChange事件,混乱的逻辑,切记加:key
iview table里面 插入下拉列表组件(自定义组件)一定要加key,不加key,table开始会加载所有数据,然后再从第2页点回第一页,就会走onChange事件,混乱的逻辑,切记加:key 关 ...
随机推荐
- SQL Server中的group by(分组)
参考网址: https://blog.csdn.net/tswc_byy/article/details/81909052 sql 查询不必需和聚合函数一起使用 ,通常来说一般是要和聚合函数一起使用来 ...
- springmvc学习日志三
一.文件的上传 1.首先在lib中添加相应的jar包 2.建立jsp页面,表单必须是post提交,编码必须是multipart/form-data,文件上传文本框必须起名 <body> & ...
- Quartz任务调度(2)CronTrigger定制个性化调度方案
Cron表达式 1. 时间字段与基本格式 Cron表达式有6或7个空格分割的时间字段组成: 位置 时间域名 允许值 允许的特殊字符 1 秒 0-59 ,-*/ 2 分支 0-59 ,-*?/ 3 小时 ...
- Mybatis--级联(一)
级联是resultMap中的配置. 级联分为3种 鉴别器(discrimination):根据某些条件采用具体实现具体实现类级联,如体检表根据性别去区分 一对一:学生和学生证 一对多:班主任和学生. ...
- JDBC中的元数据——2.参数元数据
package metadata; import java.sql.Connection; import java.sql.ParameterMetaData; import java.sql.Pre ...
- kettle 乱码问题处理方案
一.同下图加上 "-Dfile.encoding=UTF-8" ,两都都加没有试过,可先加一处,如果没有处理到问题,再加另外一处
- 刷题-力扣-264. 丑数 II
264. 丑数 II 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/ugly-number-ii/ 著作权归领扣网络所有.商业转载请 ...
- Jmeter HTML 报告、Jenkins 配置
目录 Jmeter 生成 HTML 测试报告 Jenkins 配置 Jmeter 生成 HTML 测试报告 JMeter 支持生成 HTML 测试报告, 以便从测试计划中获得图表和统计信息. 以上定义 ...
- js函数和封装
$就是jquery对象,$()就是jQuery(),在里面可以传参数,作用就是获取元素 js对象与jQuery对象的区别:jQuery对象是一个数组,jQuery对象转为js对象:[0] 取第一个即可 ...
- 在CentOs7源码安装mysql-5.6.35单实例数据库
首先安装依赖包,避免在安装过程中出现问题 [root@bogon liuzhen]# yum -y install gcc gcc-c++[root@bogon liuzhen]# yum -y in ...