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)

  


												

最新文章

  1. [转]keil使用详解
  2. Find命令的用法
  3. grunt使用入门(zz)
  4. ACdream 1214---矩阵连乘
  5. 如何用VS调试不属于解决方案的EXE和DLL程序
  6. nbIoT基础概念
  7. hdu 4223
  8. yii2 用gii生成后台模块 view path描述
  9. Python中小中花括号的区别
  10. Linux指令--which,whereis,locate,find
  11. SPOJ 1812 Longest Common Substring II
  12. 大型B2C网站高性能可伸缩架构技术探秘
  13. H5_0005:JS判断域名和时间有效期的方法
  14. python requests库网页爬取小实例:百度/360搜索关键词提交
  15. 在WIN10打造成能运行Oracle的JDK的Linux
  16. css 元素居中
  17. spring boot和mybatis入门
  18. 三、git管理修改
  19. TCP、UDP、HTTP、SOCKET之间的区别与联系-乾颐堂CCIE
  20. react事件机制

热门文章

  1. java初学第一天
  2. for循环性能测试
  3. 【java工具类】AES加密解密
  4. 最短路(模板)【CodeChef CLIQUED,洛谷P3371】
  5. es分片shard的数量
  6. Mac sublime安装package controller
  7. 字节对齐#pragma pack
  8. Oracle JET(三)Oracle JET 响应布局
  9. ASM磁盘组删除磁盘
  10. LNMP 搭建 wordpress 站点 安装及配置过程