类的基本概念及self是什么东西?
class 类
对一类拥有相同属性的对象的抽象、蓝图、原型,在类中定义了这些对象都具备的属性、共同方法
object对象
一个对象就是一个类的实例化模型,一个类必须经过实例化后才能在程序中调用,一个类可以实例化多个对象类的三大特性:
1、封装
在类中对数据赋值。内部调用对外部用户是透明的、里面包含着类的数据和方法、类似一个胶囊或者容器第一个层面:内部实现逻辑对外部不可见第二个层面(私有属性): a、以单下划线开头的属性或方法默认规定外部不调用,但是python没有做限制,知识一般开发者和使用者之前的默契 b、以双下划线开头的,不能直接调用,如果实在想调用,python内部实际是将其命名为_foo(类名)__method,使用obj._foo__method即可调用第三个层面:明确区分内外,内部可以使用双下划线属性,外部不可以使用双下划线属性,内部的实现逻辑,外部无法知晓并且为封装到内部的逻辑提供一个访问接口给外部来使用2、继承
一个类可以派生出子类,在这个父类中定义的方法属性可以被子类继承3、多态
多态实际上是继承相关的,子类继承父类之后所有子类就获得了同一个父类方法,但是不同子类调用这个方法会有不同的表现。 a、python中一切皆对象 b、不同的类可以调用相同的方法,而不用这个类是从哪里来的、例:老板让所有员工开始工作,老板只需要说开始工作,而不需要对各类员工下达任务、类似财务部、行政部、技术部等、即一个接口,多种实现。编程的两大原则:
1、写重复代码是非常不好的低级行为2、写的代码需要经常变更类的构造函数的初始化过程
首先一般函数的执行流程是:def funtion(x): x += 1 return xvalue = funtion(x)调用过程是funtion函数运行之后返回一个值这个值会存到一个内存里面,他的变量名(门牌号)是value。当写好一个类模型后,这个类会存到一个内存中,先记为:内存1 内存1中包含的东西,初始化函数,初始化属性,方法。在初始化类的实例的时候即ri = role(name) 会在内存中开辟第二个内存空间,记为:内存2,里面会存这个实例化的具体值,即r1的name.等属性即实例化的过程是为r1 = role.__init__(name),返回一个内存,事实上在类的实例化过程中内存2还会把r1存进去,即门牌号,否则你传进来的变量没有办法保存下来,python需要知道你把这些变量存到那个内存里面,存到类变量里面,肯定不合适,所以要存到对象内存里面也就是内存2.所以说实例化时候实际上需要这些参数r1 = role(r1,name)那么既然多了一个参数,所有__init__函数里面就需要加一个参数,即role.__init__(r1,name),内存2里面存的属性为ri.name 等再说类方法,类方法放到哪一个内存里面都不会改变方法里面的东西,所以没必要在内存2里面也存进去方法,所以初始化的时候并没有把类方法也存到实例的内存里面,那么当实例需要调用这个方法时候,实际上就是r1.funtion1,而funtion没在r1的内存里面啊,所以必须要调用role.funtion,那么调用role的funtion就必须要告诉funtion是哪个对象使用的我了所以就是这样调用的r1.funtion()=role.funtion1(r1),所以类的方法里面就必需加一个参数了即funtion(self)这个self有什么用比如def funtion1(r1): print r1.name如果没有r1,那么你怎么得到r1.name呢?而这个r1就是我们类里面的self的由来class Role():
def __init__(self,name): #构造函数,在实例化时做一些初始化工作
self.name = name def funtion1(self):
print self.name r1 = Role("zq")
print id(r1)
print id(r1.name)
print id(Role)
类的基本概念及self是什么东西?的更多相关文章
- CNA, FCoE, TOE, RDMA, iWARP, iSCSI等概念及 Chelsio T5 产品介绍 转载
CNA, FCoE, TOE, RDMA, iWARP, iSCSI等概念及 Chelsio T5 产品介绍 2016年09月01日 13:56:30 疯子19911109 阅读数:4823 标签: ...
- 原码,补码,反码的概念及Java中使用那种存储方式
原码,补码,反码的概念及Java中使用那种存储方式: 原码:原码表示法是机器数的一种简单的表示法.其符号位用0表示正号,用:表示负号,数值一般用二进制形式表示 补码:机器数的补码可由原码得到.如果机器 ...
- 转 RabbitMQ 基础概念及 Spring 的配置和使用 推荐好文 举例讲解
从不知道到了解—RabbitMQ 基础概念及 Spring 的配置和使用 原理同上 请求地址:http://localhost:8080/home?type=3&routing_key=myO ...
- 面向对象编程(四)继承,概念及super关键字,final关键字,Object类常见方法
继承 概念: ① 继承背后的思想就是基于已存在的类来构建新类; ② 当从已存在类继承时,就重用了它的方法和属性,还可以添加新的方法和属性来定制新类以应对需求; ③ 当从其它类导出的类叫作子 ...
- LVM逻辑卷基本概念及LVM的工作原理
这篇随笔将详细讲解Linux磁盘管理机制中的LVM逻辑卷的基本概念以及LVM的工作原理!!! 一.传统的磁盘管理 其实在Linux操作系统中,我们的磁盘管理机制和windows上的差不多,绝大多数都是 ...
- Linux磁盘管理:LVM逻辑卷基本概念及LVM的工作原理
一.传统的磁盘管理 其实在Linux操作系统中,我们的磁盘管理机制和windows上的差不多,绝大多数都是使用MBR(Master Boot Recorder)都是通过先对一个硬盘进行分区,然后再将该 ...
- docker核心概念及centos6下安装
Docker三大核心概念 镜像 容器 仓库 镜像 docker镜像类似于虚拟机镜像,可以将它理解为一个面向Docker引擎的只读模板,包含了文件系统. 容器 1.容器是从镜像创建的应用运行实例,容器和 ...
- docker第一章:docker核心概念及centos6下安装
Docker三大核心概念 镜像 容器 仓库 镜像 docker镜像类似于虚拟机镜像,可以将它理解为一个面向Docker引擎的只读模板,包含了文件系统. 容器 1.容器是从镜像创建的应用运行实例,容器和 ...
- Java01-Java基本概念及JDK安装
Java是由sun公司于1995年5月推出的Java程序设计语言和Java平台的总称. Java是一个完整的平台,不仅提供了优秀的编程语言,而且还提供了大量的可重用代码以及一个能提供安全性.可移植性. ...
随机推荐
- Serverless 实战 —— 函数计算 + Typescript 实践
前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute):函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传.函数计算准 ...
- Acitiviti的查询及删除(六)
流程定义查询 查询部署的流程定义. /** * 查询流程定义信息 //act_re_procdef */ public class QueryProcessDefinition { public st ...
- 【bzoj1975】[Sdoi2010]魔法猪学院
*题目描述: iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世界的世界本原有了很多的了解:众所周知,世界是由元素构成的:元 ...
- IOC和AOP使用扩展之AOP详解实现类
摘要: “Depend on yourself” is what nature says to every man. Parents can help you. Teachers can hel ...
- android 开发,视频群聊引发短信异常
说到 NDK 开发,其实是为了有些时候为了项目需求需要调用底层的一些 C/C++ 的一些东西:另外就是为了效率更加高些. 但是很多时候能不用就不用:这个是啥原因?个人感觉有些时候是觉得麻烦,首先要配置 ...
- TestingWhiz社区版2013版下载地址
TestingWhiz社区版 https://sourceforge.net/projects/testingwhiz-community-edition/ https://sourceforge.n ...
- 后端PHP框架laravel学习踩的各种坑
安装完laravel的ventor目录后出现“Whoops, looks like something went wrong.”这样的错误信息 打开config/app.php,打开debug为tru ...
- php WebSocket 简单实现demo
WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议. WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据. 在 ...
- 冲刺周—The First Day
一.FirstDay照片 二.项目分工 三.今日份燃尽图 四.项目进展 码云团队协同环境构建完毕 利用Leangoo制作任务分工及生成燃尽图 完成AES加解密部分代码 五.问题与困难 1.AES加解密 ...
- Laravel5.5执行 npm run dev时报错,提示cross-env找不到(not found)的解决办法
Laravel 5.4 Mix & Laravel5.5执行 npm run dev时报错,提示cross-env找不到(not found)的解决办法 首先进入package.json文 ...