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

1、self是什么

在python的类中self代表实例本身,明确的是self只有在类的方法中才会有,独立的函数或方法是不必带有self的。self在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数。具体来说,是该实例的内存地址。
在调用实例的方法时,Python解释器会自己把实例!!变量!!传给类的函数中的self。
以上述代码I为例,代码I定义了一个类Test,在这个类中,self为参数变量,在类Test实例化得到实例ins时,python解释器自动调用__init__,执行Test.init(ins, 123),该self可接收实例ins的内存地址,从而self代表了实例本身。类似的,如果实例化ins后,执行ins.fun1( ),python解释器会将ins.fun1( )解释成Test.fun1(ins)。可见,self这个变量是无需用户手动传送值的,解释器会自动帮我们给其传递实例。
需要注意的是,self不是关键字,换言之,可以用其它的合法变量名替换self,但是,规范和标准建议我们一致使用self。

2,举个栗子

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

class Person:def _init_(myname,name):myname.name=namedef sayhello(myname):print 'My name is:',myname.name
p=Person('Bill')
print p

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

class Person:def _init_(self,name):self.name=namedef sayhello(self):print 'My name is:',self.name
p=Person('Bill')
print p

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

class Person:def _init_(self,name):self.name=namedef sayhello(self):print 'My name is:',self.name
p1=Person('Bill')
p2 = Person('Apple')
print p1

总结

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

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

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

3.self和变量的关系

a = 1
def say():  print '调用了全局方法'
class people:  a = 100  def say(self):  print '调用了类的方法'  def do(self):  say()  self.say()  print 'a = ' , a  print 'self.a = ' , self.a
p = people()
p.do()  >>>
调用了全局方法
调用了类的方法
a =  1
self.a =  100
Python中,类之外可以定义很多全局变量和函数,这是它与java明显的不同。为了解释器准确的找到函数或变量,需要使用self来限定方法变量的区域,这样解释器就能快速知道你调用的是类中的变量还是全局的变量了。

4,参考文章python里面的self,是谁啊? - 知乎 (zhihu.com)

学习笔记——Python类中的self到底是干啥的相关推荐

  1. python编程是干啥用的-浅谈Python类中的self到底是干啥的

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

  2. Python类中的self到底是干啥的

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

  3. python中类里self_Python类中的self到底是干啥的

    Python类中的self到底是干啥的 Python编写类的时候,每个函数参数第一个参数都是self,一开始我不管它到底是干嘛的,只知道必须要写上.后来对Python渐渐熟悉了一点,再回头看self的 ...

  4. python类self_Python类中的self到底是干啥的

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

  5. (JAVA学习笔记) Scanner类中next方法和nextline方法的区别

    next(): 1.一定要读取到有效字符后才可以结束输入. 2. 对输入有效字符之前遇到的空白,next()方法会自动将其去掉. 3.只有输入有效字符后才将其后面输入的空白作为分隔符或结束符. *4. ...

  6. Python类中的方法要加self的理由

    参考  Python类中的方法要加self的理由 - 云+社区 - 腾讯云 Python类中的self到底是干啥的 首先明确的是self只有在类的方法中才会有,独立的函数或方法是不必带有self的.s ...

  7. python类中成员的的调用

    python类中成员的调用 python类中的方法到底到底是方法还是函数取绝于调用者, 当类名调用这个方法时他是一个函数 class Foo(object):def f1(self):print(&q ...

  8. Python学习笔记 (类与对象)

    Python学习笔记 (类与对象) 1.类与对象 面向对象编程语言类: 一个模板, (人类)-是一个抽象的, 没有实体的对象: (eg: 张三, 李四) 属性: (表示这类东西的特征, 眼睛, 嘴巴, ...

  9. python面向对象编程72讲_2020-07-22 Python学习笔记27类和面向对象编程

    一些关于自己学习Python的经历的内容,遇到的问题和思考等,方便以后查询和复习. 声明:本人学习是在扇贝编程通过网络学习的,相关的知识.案例来源于扇贝编程.如果使用请说明来源. 第27关 类与面向对 ...

最新文章

  1. 经验 | 图像分割的实用技巧
  2. el表达式 java_java基础学习:JavaWeb之EL表达式
  3. 32岁前平凡无奇,鼓动同事创业,最终逆袭成硅谷首富
  4. 洛谷——P2299 Mzc和体委的争夺战
  5. js获取网络时间(axios获取响应头时间)
  6. svn 合并分支 (svn操作手册)
  7. 百度热力图颜色说明_基于百度热力图的中国多中心城市分析|上海城市规划
  8. uniapp 微信小程序的弹框文字换行
  9. 01.第一个html文件.html
  10. arx 锁定解锁图层 刷新透明度
  11. 医院预约挂号系统-系统结构
  12. 江苏工勤计算机高级工职称,事业单位专业技术职称与工勤岗高级工的区别
  13. 旷视科技2022提前批校园招聘已经开启啦!
  14. golang爬取免费代理IP
  15. 雷电助手连接不到服务器,雷电模拟器无法联网怎么办 雷电模拟器网络异常的解决办法...
  16. 8款受欢迎的代码编辑器,你喜欢用哪一款呢?
  17. 后端php接口,PHP_TP5框架开发后端接口(代码编写思路)
  18. 表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)
  19. 大小鲨鱼走红 纳米防水技能大有作为
  20. 什么是SOA,谈谈你的SOA的理解

热门文章

  1. 简单有趣的变形金刚网络(VIT) Vision Transformer(可以直接替换自己数据集)-直接放置自己的数据集就能直接跑(网络结构详解+详细注释代码+核心思想讲解)——pytorch实现
  2. python 发送及抄送邮件
  3. 体验迅雷看看HD3.3“远程视频”功能
  4. python爬斗鱼直播_Python爬虫:利用API实时爬取斗鱼弹幕
  5. HTML5 3D书本翻页动画
  6. 华为mate5鸿蒙,华为Mate50Pro概念机:立体真全屏+浴霸5镜头,鸿蒙能救华为吗
  7. 陪伴是最长情的告白,守护是最沉默的陪伴丨母亲节快乐!
  8. WAP2.0移动互联(转)
  9. 如何在iPhone上设置和使用Siri
  10. openLayers画椭圆