关于python中self作用

类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,但是在调用这个方法的时候你为这个参数赋值,Python会提供这个值。这个特别的变量指对象本身,按照惯例它的名称是self

虽然你可以给这个参数任何名称,但是 强烈建议 你使用self这个名称——其他名称都是不赞成你使用的。使用一个标准的名称有很多优点——你的程序读者可以迅速识别它,如果使用self的话,还有些IDE(集成开发环境)也可以帮助你。

给C++/Java/C#程序员的注释
Python中的self等价于C++中的self指针和Java、C#中的this参考。

你一定很奇怪Python如何给self赋值以及为何你不需要给它赋值。举一个例子会使此变得清晰。假如你有一个类称为MyClass和这个类的一个实例MyObject。当你调用这个对象的方法MyObject.method(arg1, arg2)的时候,这会由Python自动转为MyClass.method(MyObject, arg1, arg2)——这就是self的原理了。

这也意味着如果你有一个不需要参数的方法,你还是得给这个方法定义一个self参数。

注:上文来自简明python教程

例子:

#!/usr/bin/python
#coding:utf-8
class test:                        #定义一个test类
desc="这是一个测试类。"    #定义一个类的属性desc
def __init__(self,name):   #对象构造函数,初始化类
self.name=name
def show(self,name2):      #在类中定义一个方法show()
print "Hello world"
print 'name:',self.name
print 'name2:',name2
instance=test('这是传递给name的值')   #生成test类的实例对象instance
print instance.desc                   #调用类中的desc属性
instance.show('这是传递给name2的值')  #调用类中的show()方法
#test.show(instance,'这是传递给name2的值') 这里面的instance就是self

转载于:https://blog.51cto.com/leeforget/1177166

python 中self相关推荐

  1. 如何优雅的在python中暂停死循环?

    死循环 有时候在工作中可能会遇到要一直执行某个功能的程序,这时候死循环就派上用途了,python中死循环的具体形式大致如下 while True:run_your_code() 结束死循环 通常我们结 ...

  2. 关于python中的dict和defaultdict

    dict 在Python中如果访问字典中不存在的键,会引发KeyError异常,所以一般当我们比如统计一句话的词频时候,我们总是使用这样的处理方式: strings = ('puppy', 'kitt ...

  3. python中的新式类与旧式类的一些基于descriptor的概念(上)

    python中基于descriptor的一些概念(上) 1. 前言 2. 新式类与经典类 2.1 内置的object对象 2.2 类的方法 2.2.1 静态方法 2.2.2 类方法 2.3 新式类(n ...

  4. Python中yield和yield from的用法

    yield 后面接的是 future 对象 调用方 委托生成器 yield from 直接给出循环后的结果 yield from 委托者和子生成器直接通信 yield from 直接处理stopIte ...

  5. Python中正则表达式用法 重点格式以这个为准_首看_各种问题

    20210811 https://www.jb51.net/article/101258.htm 一.惰性模式的概念: 此模式和贪婪模式恰好相反,它尽可能少的匹配字符以满足正则表达式即可,例如: va ...

  6. 逗号分隔的字符串转换为Python中的列表 split

    将逗号分隔的字符串转换为Python中的列表 给定一个字符串: 它是由逗号分隔的几个值的序列: mStr = '192.168.1.1,192.168.1.2,192.168.1.3' 如何将字符串转 ...

  7. [翻译]Python中yield的解释

    问题: Python中yield关键字的作用是什么?它做了什么? 例如,我想理解以下代码 def node._get_child_candidates(self, distance, min_dist ...

  8. 全面理解Python中的类型提示(Type Hints)

    众所周知,Python 是动态类型语言,运行时不需要指定变量类型.这一点是不会改变的,但是2015年9月创始人 Guido van Rossum 在 Python 3.5 引入了一个类型系统,允许开发 ...

  9. python中break和continue的区别

    python中break和continue的区别 break 结束for 或者while 循环  后面还没循环到的 不再循环 continue 当满足某种条件时结束当前值的循环 后面没有循环的继续循环 ...

  10. 通过带Flask的REST API在Python中部署PyTorch

    通过带Flask的REST API在Python中部署PyTorch 在本文中,将使用Flask来部署PyTorch模型,并用讲解用于模型推断的 REST API.特别是,将部署一个预训练的Dense ...

最新文章

  1. 深度学习的五个能力级别
  2. 判断string是否为数字
  3. 基础练习 数列特征 c语言
  4. 分享10个jQuery页面动态编辑插件
  5. redis-cli 常用命令
  6. Linux2.6.32内核笔记(5)在应用程序中移植使用内核链表【转】
  7. 扩展欧几里德算法的定义、解释、证明及其应用
  8. 实现成长之路——SpringBean三:实例化Bean的姿势都有哪些?
  9. 必读的Python入门书籍,你都看
  10. 2014最新开源微信源码 支持二次开发,微信对接公众平台多用户程序 全面体验
  11. Internet Explorer 无法打开搜索页完美解决办法
  12. 电脑任务栏应用图标变成白色怎么恢复
  13. 2021年6月上市公司新闻舆论事件分析报告合集
  14. 计算机专业考计量经济学,计量经济学期末考试题库(完整版)及答案()(47页)-原创力文档...
  15. 6-23 sdust-Java-可实现多种排序的Book类
  16. dump和coredump
  17. 统计学基础5-多维随机变量及其分布
  18. 基于51单片机的小区智能防盗门禁密码锁 proteus仿真程序设计
  19. 关于mysql百万100W数据查询优化
  20. Python变量与字符串操作

热门文章

  1. 【C/C++】通过无类型指针实现泛型拷贝(内存拷贝)
  2. oracle 概念复习,oracle复习整理
  3. Ormlite数据库
  4. linux添加自定义的命令!
  5. 《C语言及程序设计》实践项目——指针及其运算
  6. Android 系统预装添加第三方apk到data/app
  7. 十个提升你Emacs生产力的高招
  8. 【项目经理之修炼】 全文索引
  9. cfree mysql_如何配置CFree才能开发MySql数据库应用 | 学步园
  10. 如何改变tabcontrol控件背景色和标签字体和颜色_如何利用标签打印软件将网址信息转成带logo的二维码...