Python类中self参数用法详解


Posted in Python onFebruary 13, 2020

Python编写类的时候,每个函数参数第一个参数都是self,一开始我不管它到底是干嘛的,只知道必须要写上。后来对Python渐渐熟悉了一点,再回头看self的概念,似乎有点弄明白了。

首先明确的是self只有在类的方法中才会有,独立的函数或方法是不必带有self的。self在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数。

self名称不是必须的,在python中self不是关键词,你可以定义成a或b或其它名字都可以,但是约定成俗(为了和其他编程语言统一,减少理解难度),不要搞另类,大家会不明白的。

下例中将self改为myname一样没有错误:

class Person:
  def __init__(myname,name):
    myname.name=name
  def sayhello(myname):
    print ('My name is:',myname.name)
p=Person('aoteman')
print(p)

self指的是类实例对象本身(注意:不是类本身)。

class Person:
  def __init__(self,name):
    self.name=name
  def sayhello(self):
    print ('My name is:',self.name)
p=Person('aoteman')
print(p)

在上述例子中,self指向Person的实例p。 为什么不是指向类本身呢,如下例子:

class Person:
  def __init__(self,name):
    self.name=name
  def sayhello(self):
    print ('My name is:',self.name)
p1 = Person('aoteman')
p2 = Person('xiaoyiyi')
print(p1)

如果self指向类本身,那么当有多个实例对象时,self指向哪一个呢?

总结

self在定义时需要定义,但是在调用时会自动传入。

self的名字并不是规定死的,但是最好还是按照约定是用self

更多关于Python类中self参数的用法请查看下面的相关链接

Python 相关文章推荐
Python StringIO模块实现在内存缓冲区中读写数据
Apr 08 Python
python切片及sys.argv[]用法详解
May 25 Python
Python中xml和json格式相互转换操作示例
Dec 05 Python
Python离线安装PIL 模块的方法
Jan 08 Python
初探利用Python进行图文识别(OCR)
Feb 26 Python
python3 常见解密加密算法实例分析【base64、MD5等】
Dec 19 Python
python matplotlib画盒图、子图解决坐标轴标签重叠的问题
Jan 19 Python
Django在Model保存前记录日志实例
May 14 Python
PIL.Image.open和cv2.imread的比较与相互转换的方法
Jun 03 Python
Python 中如何写注释
Aug 28 Python
在终端启动Python时报错的解决方案
Nov 20 Python
Python使用Web框架Flask开发项目
Jun 01 Python
python字符串下标与切片及使用方法
Feb 13 #Python
python时间与Unix时间戳相互转换方法详解
Feb 13 #Python
Python3查找列表中重复元素的个数的3种方法详解
Feb 13 #Python
python 实现字符串下标的输出功能
Feb 13 #Python
Python3实现监控新型冠状病毒肺炎疫情的示例代码
Feb 13 #Python
python操作docx写入内容,并控制文本的字体颜色
Feb 13 #Python
使用Python 自动生成 Word 文档的教程
Feb 13 #Python
You might like
PHP的几个常用数字判断函数代码
2012/04/24 PHP
详解PHP中的Traits
2015/07/29 PHP
php微信分享到朋友圈、QQ、朋友、微博
2019/02/18 PHP
极酷的javascirpt,让你随意编辑任何网页
2007/02/25 Javascript
一个js的tab切换效果代码[代码分离]
2010/04/11 Javascript
JS,Jquery获取select,dropdownlist,checkbox下拉列表框的值(示例代码)
2014/01/11 Javascript
Javascript代码实现仿实例化类
2015/04/03 Javascript
利用jQuery及AJAX技术定时更新GridView的某一列数据
2015/12/04 Javascript
jQuery中的Deferred和promise 的区别
2016/04/03 Javascript
Bootstrap学习笔记 轮播(Carousel)插件
2017/03/21 Javascript
在 Angular 中使用Chart.js 和 ng2-charts的示例代码
2017/08/17 Javascript
简单实现jQuery轮播效果
2017/08/18 jQuery
JS库之wow.js使用方法
2017/09/14 Javascript
nodejs基础之buffer缓冲区用法分析
2018/12/26 NodeJs
vue框架下部署上线后刷新报404问题的解决方案(推荐)
2019/04/03 Javascript
详解微信小程序之一键复制到剪切板
2019/04/24 Javascript
基于JS判断对象是否是数组
2020/01/10 Javascript
微信小程序实现modal弹出框遮罩层组件(可带文本框)
2020/12/20 Javascript
[10:18]2018DOTA2国际邀请赛寻真——找回自信的TNCPredator
2018/08/13 DOTA
深入理解Python爬虫代理池服务
2018/02/28 Python
jupyter notebook引用from pyecharts.charts import Bar运行报错
2020/04/23 Python
对pandas中Series的map函数详解
2018/07/25 Python
使用python将请求的requests headers参数格式化方法
2019/01/02 Python
检测python爬虫时是否代理ip伪装成功的方法
2019/07/12 Python
Python使用Pandas对csv文件进行数据处理的方法
2019/08/01 Python
消防安全宣传标语
2014/06/07 职场文书
材料成型及控制工程专业求职信
2014/06/19 职场文书
2014国庆节商场促销活动策划方案
2014/09/16 职场文书
学生考试舞弊检讨书
2015/01/01 职场文书
地球一小时活动总结
2015/02/27 职场文书
接收函
2019/04/22 职场文书
小学生六年级作文之关于感恩
2019/08/16 职场文书
创业计划书之暑假培训班
2019/11/09 职场文书
一篇文章弄懂MySQL查询语句的执行过程
2021/05/07 MySQL
星际争霸:毕姥爷vs解冻03
2022/04/01 星际争霸
关于vue-router-link选择样式设置
2022/04/30 Vue.js