浅谈Python类中的self到底是干啥的


Posted in Python onNovember 11, 2019

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('Bill')
print p

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

class Person:
  def _init_(self,name):
    self.name=name
  def sayhello(self):
    print 'My name is:',self.name
p=Person('Bill')
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('Bill')
p2 = Person('Apple')
print p1

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

总结

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

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

self总是指调用时的类的实例。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中的集合介绍
Jan 28 Python
详解python持久化文件读写
Apr 06 Python
python解析xml简单示例
Jun 21 Python
Python编写打字训练小程序
Sep 26 Python
Mac 使用python3的matplot画图不显示的解决
Nov 23 Python
浅谈python print(xx, flush = True) 全网最清晰的解释
Feb 21 Python
Python 没有main函数的原因
Jul 10 Python
Python使用urlretrieve实现直接远程下载图片的示例代码
Aug 17 Python
python Matplotlib数据可视化(2):详解三大容器对象与常用设置
Sep 30 Python
Python中用xlwt制作表格实例讲解
Nov 05 Python
使用Python爬取小姐姐图片(beautifulsoup法)
Feb 11 Python
浅谈Python numpy创建空数组的问题
May 25 Python
python 调试冷知识(小结)
Nov 11 #Python
通过 Django Pagination 实现简单分页功能
Nov 11 #Python
python机器学习实现决策树
Nov 11 #Python
Python SQLAlchemy入门教程(基本用法)
Nov 11 #Python
django中间键重定向实例方法
Nov 10 #Python
Java文件与类动手动脑实例详解
Nov 10 #Python
python语言线程标准库threading.local解读总结
Nov 10 #Python
You might like
Protoss兵种对照表
2020/03/14 星际争霸
基于php伪静态的实现详细介绍
2013/04/28 PHP
WordPress中用于获取及自定义头像图片的PHP脚本详解
2015/12/17 PHP
深入理解PHP中的empty和isset函数
2016/05/26 PHP
laravel-admin 在列表页添加自定义按钮的例子
2019/09/30 PHP
laravel框架如何设置公共头和公共尾
2019/10/22 PHP
TP5框架实现一次选择多张图片并预览的方法示例
2020/04/04 PHP
基于jQuery图片平滑连续滚动插件
2009/04/27 Javascript
基于jquery的loading 加载提示效果实现代码
2011/09/01 Javascript
浅析XMLHttpRequest的缓存问题
2013/12/13 Javascript
通过正则表达式实现表单验证是否为中文
2014/02/18 Javascript
JavaScript实现将xml转换成html table表格的方法
2015/04/17 Javascript
jQuery ajax应用总结
2016/06/02 Javascript
Angularjs 实现分页功能及示例代码
2016/09/14 Javascript
JavaScript基于对象去除数组重复项的方法
2016/10/09 Javascript
vue中实现图片和文件上传的示例代码
2018/03/16 Javascript
使用淘宝镜像cnpm安装Vue.js的图文教程
2018/05/17 Javascript
vue实现简单loading进度条
2018/06/06 Javascript
实例分析vue循环列表动态数据的处理方法
2018/09/28 Javascript
JavaScript数组类型Array相关的属性与方法详解
2020/09/08 Javascript
Python和JavaScript间代码转换的4个工具
2016/02/22 Python
Python 序列的方法总结
2016/10/18 Python
利用python操作SQLite数据库及文件操作详解
2017/09/22 Python
python+unittest+requests实现接口自动化的方法
2018/11/29 Python
学生信息管理系统Python面向对象版
2019/01/30 Python
读取nii或nii.gz文件中的信息即输出图像操作
2020/07/01 Python
基于PyInstaller各参数的含义说明
2021/03/04 Python
美国大尺码女装零售商:TORRID
2016/10/01 全球购物
诗狄娜化妆品官方网站:Stila Cosmetics
2016/12/21 全球购物
DC Shoes官网:美国滑板鞋和服饰品牌
2017/09/03 全球购物
在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern "C"
2014/08/09 面试题
abstract是什么意思
2012/02/12 面试题
优秀广告词大全
2014/03/19 职场文书
项目合作协议书范本
2014/04/16 职场文书
关工委先进个人事迹材料
2014/05/23 职场文书
学生考试舞弊检讨书
2015/01/01 职场文书