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 x
value = 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是什么东西?的更多相关文章

  1. CNA, FCoE, TOE, RDMA, iWARP, iSCSI等概念及 Chelsio T5 产品介绍 转载

    CNA, FCoE, TOE, RDMA, iWARP, iSCSI等概念及 Chelsio T5 产品介绍 2016年09月01日 13:56:30 疯子19911109 阅读数:4823 标签:  ...

  2. 原码,补码,反码的概念及Java中使用那种存储方式

    原码,补码,反码的概念及Java中使用那种存储方式: 原码:原码表示法是机器数的一种简单的表示法.其符号位用0表示正号,用:表示负号,数值一般用二进制形式表示 补码:机器数的补码可由原码得到.如果机器 ...

  3. 转 RabbitMQ 基础概念及 Spring 的配置和使用 推荐好文 举例讲解

    从不知道到了解—RabbitMQ 基础概念及 Spring 的配置和使用 原理同上 请求地址:http://localhost:8080/home?type=3&routing_key=myO ...

  4. 面向对象编程(四)继承,概念及super关键字,final关键字,Object类常见方法

    继承 概念: ①   继承背后的思想就是基于已存在的类来构建新类; ②   当从已存在类继承时,就重用了它的方法和属性,还可以添加新的方法和属性来定制新类以应对需求; ③   当从其它类导出的类叫作子 ...

  5. LVM逻辑卷基本概念及LVM的工作原理

    这篇随笔将详细讲解Linux磁盘管理机制中的LVM逻辑卷的基本概念以及LVM的工作原理!!! 一.传统的磁盘管理 其实在Linux操作系统中,我们的磁盘管理机制和windows上的差不多,绝大多数都是 ...

  6. Linux磁盘管理:LVM逻辑卷基本概念及LVM的工作原理

    一.传统的磁盘管理 其实在Linux操作系统中,我们的磁盘管理机制和windows上的差不多,绝大多数都是使用MBR(Master Boot Recorder)都是通过先对一个硬盘进行分区,然后再将该 ...

  7. docker核心概念及centos6下安装

    Docker三大核心概念 镜像 容器 仓库 镜像 docker镜像类似于虚拟机镜像,可以将它理解为一个面向Docker引擎的只读模板,包含了文件系统. 容器 1.容器是从镜像创建的应用运行实例,容器和 ...

  8. docker第一章:docker核心概念及centos6下安装

    Docker三大核心概念 镜像 容器 仓库 镜像 docker镜像类似于虚拟机镜像,可以将它理解为一个面向Docker引擎的只读模板,包含了文件系统. 容器 1.容器是从镜像创建的应用运行实例,容器和 ...

  9. Java01-Java基本概念及JDK安装

    Java是由sun公司于1995年5月推出的Java程序设计语言和Java平台的总称. Java是一个完整的平台,不仅提供了优秀的编程语言,而且还提供了大量的可重用代码以及一个能提供安全性.可移植性. ...

随机推荐

  1. JConsole和VisualVM远程访问JMX

    1.jvisualvm监控tomcat 修改tomcat的bin目录下的 catalina.sh文件,搜索JAVA_OPTS="",在引号中添加参数 JAVA_OPTS=" ...

  2. 【机器人M号】题解

    题目 题目描述 3030年,Macsy正在火星部署一批机器人. 第1秒,他把机器人1号运到了火星,机器人1号可以制造其他的机器人. 第2秒,机器人1号造出了第一个机器人--机器人2号. 第3秒,机器人 ...

  3. LeetCode--114--二叉树展开为链表(python)

    给定一个二叉树,原地将它展开为链表. 例如,给定二叉树 1 / \  2   5 / \     \ 3 4      6将其展开为: 1  \   2   \    3  \       4  \ ...

  4. element的隐藏组件滚动条el-scrollbar使用

    elementui中有个隐藏的组件,就是element官网使用的滚动条,tree 左右滑动滚动条 ①首先全局引入element,import ElementUI from 'element-ui'; ...

  5. 标签button:点击button按钮时,出现了页面自动刷新的情况

    原html: <button class="btn btn-primary" id="btnSubmit" name="btnSubmit&qu ...

  6. XML的基础之一(概念和语法)

    XML的基础(概念和语法) xml html 概念 异同  XML全称为extensible markup language,即可扩展标记语言,简单理解为可预定义标签的编程语言.它与HTML(超文本标 ...

  7. 术语-EDI:EDI

    ylbtech-术语-EDI:EDI 电子数据交换(Electronic data interchange,缩写EDI)是指按照同一规定的一套通用标准格式,将标准的经济信息,通过通信网络传输,在贸易伙 ...

  8. Vue实现音乐播放器(四):页面入口+header组件的编写

    首先下载三个包 babel-runtime对es语法进行转义 fastclick解决移动端点击300毫秒延迟的问题 babel-polyfill对es6 api进行转义 下载了包之后要在main.js ...

  9. img下面出现了蜜汁空白

    这段时间一直在做老师不值得的手机端的网页,在给元素设置宽度的时候都是使用百分比的形式,后来知道,这就是流体布局.不过这些都是后话,下面说的是在做静态手机站的时候遇到的一个问题. 因为使用了流体布局,几 ...

  10. 伪造IP及获取客户端真实IP地址

    Fiddler支持自定义规则,可以实现对HTTP请求数据发送给Server前或HTTP应答数据发送给浏览器前进行修改.下面的例子将演示如何向所有HTTP请求数据中增加一个头.1)打开Fiddler,点 ...