浅谈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设计模式之代理模式实例
Apr 26 Python
Python中urllib2模块的8个使用细节分享
Jan 01 Python
在Python的Django框架中simple-todo工具的简单使用
May 30 Python
python常见排序算法基础教程
Apr 13 Python
Scrapy框架CrawlSpiders的介绍以及使用详解
Nov 29 Python
取numpy数组的某几行某几列方法
Apr 03 Python
解决Pycharm后台indexing导致不能run的问题
Jun 27 Python
python单线程下实现多个socket并发过程详解
Jul 27 Python
Python openpyxl读取单元格字体颜色过程解析
Sep 03 Python
使用Python爬虫库BeautifulSoup遍历文档树并对标签进行操作详解
Jan 25 Python
jupyter notebook插入本地图片的实现
Apr 13 Python
python获取响应某个字段值的3种实现方法
Apr 30 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
用Zend Encode编写开发PHP程序
2006/10/09 PHP
php下载远程文件类(支持断点续传)
2008/11/14 PHP
php中日期加减法运算实现代码
2011/12/08 PHP
PHP error_log()将错误信息写入一个文件(定义和用法)
2013/10/25 PHP
更改localhost为其他名字的方法
2014/02/10 PHP
php递归调用删除数组空值元素的方法
2015/04/28 PHP
laravel 5.3中自定义加密服务的方案详解
2017/05/09 PHP
php 使用 __call实现重载功能示例
2019/11/18 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
2020/03/26 PHP
javascript 无提示关闭窗口脚本
2009/08/17 Javascript
JavaScript:new 一个函数和直接调用函数的区别分析
2013/07/10 Javascript
JavaScript中“过于”犀利地for/in循环使用示例
2013/10/22 Javascript
把字符串按照特定的字母顺序进行排序的js代码
2014/01/28 Javascript
JavaScript中的条件判断语句使用详解
2015/06/03 Javascript
javascript+html5实现绘制圆环的方法
2015/07/28 Javascript
jQuery prototype冲突的2种解决方法(附demo示例下载)
2016/01/21 Javascript
全面解析Bootstrap中nav、collapse的使用方法
2016/05/22 Javascript
seajs模块之间依赖的加载以及模块的执行
2016/10/21 Javascript
详解JavaScript中js对象与JSON格式字符串的相互转换
2017/02/14 Javascript
动态统计当前输入内容的字节、字符数的实例详解
2017/10/27 Javascript
原生js实现移动端触摸轮播的示例代码
2017/12/22 Javascript
vue 项目常用加载器及配置详解
2018/01/22 Javascript
vue使用v-if v-show页面闪烁,div闪现的解决方法
2018/10/12 Javascript
express启用https使用小记
2019/05/21 Javascript
layer.open回调获取弹出层参数的实现方法
2019/09/10 Javascript
Vue实例的对象参数options的几个常用选项详解
2019/11/08 Javascript
为什么JavaScript中0.1 + 0.2 != 0.3
2020/12/03 Javascript
详解python中字典的循环遍历的两种方式
2017/02/07 Python
python函数的5种参数详解
2017/02/24 Python
使用pycharm在本地开发并实时同步到服务器
2019/08/02 Python
Kaufmann Mercantile官网:家居装饰、配件、户外及更多
2018/09/28 全球购物
教师绩效工资方案
2014/02/01 职场文书
幼儿园教师岗位职责
2014/03/17 职场文书
数学复习课教学反思
2016/02/18 职场文书
Python insert() / append() 用法 Leetcode实战演示
2021/03/31 Python
SpringBoot使用ip2region获取地理位置信息的方法
2022/06/21 Java/Android