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 相关文章推荐
Ubuntu 14.04+Django 1.7.1+Nginx+uwsgi部署教程
Nov 18 Python
在Windows服务器下用Apache和mod_wsgi配置Python应用的教程
May 06 Python
Python基于回溯法子集树模板解决0-1背包问题实例
Sep 02 Python
详解supervisor使用教程
Nov 21 Python
Python实现的rsa加密算法详解
Jan 24 Python
Linux下python与C++使用dlib实现人脸检测
Jun 29 Python
python对离散变量的one-hot编码方法
Jul 11 Python
TensorFlow利用saver保存和提取参数的实例
Jul 26 Python
浅谈python连续赋值可能引发的错误
Nov 10 Python
Python项目 基于Scapy实现SYN泛洪攻击的方法
Jul 23 Python
Python OpenCV实现测量图片物体宽度
May 27 Python
keras Lambda自定义层实现数据的切片方式,Lambda传参数
Jun 11 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
main.php
2006/12/09 PHP
php 常用类汇总 推荐收藏
2010/05/13 PHP
php eval函数用法 PHP中eval()函数小技巧
2012/10/31 PHP
PHP中Session引起的脚本阻塞问题解决办法
2014/04/08 PHP
destoon实现不同会员组公司名称显示不同的颜色的方法
2014/08/22 PHP
为PHP安装imagick时出现Cannot locate header file MagickWand.h错误的解决方法
2014/11/03 PHP
基于php双引号中访问数组元素报错的解决方法
2018/02/01 PHP
js获取和设置属性的方法
2014/02/20 Javascript
jQuery学习笔记之 Ajax操作篇(三) - 过程处理
2014/06/23 Javascript
jQuery实现瀑布流的取巧做法分享
2015/01/12 Javascript
浅谈Unicode与JavaScript的发展史
2015/01/19 Javascript
JS+CSS实现实用的单击输入框弹出选择框的方法
2015/02/28 Javascript
Jquery使用val方法读写value值
2015/05/18 Javascript
jQuery实现单击弹出Div层窗口效果(可关闭可拖动)
2015/09/19 Javascript
JS实现slide文字框缩放伸展效果代码
2015/11/05 Javascript
浅析JS运动
2015/12/28 Javascript
分享jQuery插件的学习笔记
2016/01/14 Javascript
AngularJS入门教程之迭代器过滤详解
2016/08/18 Javascript
vue数据双向绑定原理解析(get & set)
2017/03/08 Javascript
深入理解Angular中的依赖注入
2017/06/26 Javascript
javaScript字符串工具类StringUtils详解
2017/12/08 Javascript
Angular 作用域scope的具体使用
2017/12/11 Javascript
nodejs调取微信收货地址的方法
2017/12/20 NodeJs
ajax前台后台跨域请求处理方式
2018/02/08 Javascript
layui实现给某一列加点击事件
2019/10/26 Javascript
vue设置导航栏、侧边栏为公共页面的例子
2019/11/01 Javascript
利用QT写一个极简单的图形化Python闹钟程序
2015/04/07 Python
django-crontab 定时执行任务方法的实现
2019/09/06 Python
python GUI库图形界面开发之PyQt5树形结构控件QTreeWidget详细使用方法与实例
2020/03/02 Python
电子商务专业个人的自我评价
2013/11/19 职场文书
行政人事经理职位说明书
2014/03/05 职场文书
文明班集体申报材料
2014/05/23 职场文书
关于九一八事变的演讲稿2014
2014/09/17 职场文书
平安建设汇报材料
2014/12/29 职场文书
一文了解JavaScript用Element Traversal新属性遍历子元素
2021/11/27 Javascript
前端vue+express实现文件的上传下载示例
2022/02/18 Vue.js