面向对象编程

面向对象的特性

  封装:把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

   继承:面向对象编程 (OOP) 语言的一个主要功能就是“继承”。它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。

   多态:允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。多态是为了实现接口重用!

    例子:      

 # Author:RYB
# __*__coding:utf-8__*__ class Dog(object):
def __init__(self,name,type):
self.name = name
self.type = type
def bark(self):
print("%s I am a dog!" % self.name)
def eat(self,food):
print("%s eating %s" %(self.name,food))
d1=Dog("lucy","zangao")
print(d1.name,d1.type)
d1.bark()
d1.eat("bread")

运行结果:  

lucy zangao
lucy I am a dog!
lucy eating bread

封装

  类变量:作为默认公有属性;全局修改,增加新属性。

  实例变量:即成员属性,存在自己内存空间里的属性。每个实例独有的属性。构造函数(初始化函数)里的变量都是实例变量;每个实例都可以增加(修改)自己的实例变量。

  公有属性:对应类变量。

  私有属性:__属性名,用来表示私有属性,不允许别人(外部)访问。只能在实例的内部各函数(方法)中调用。

 

继承

 继承的实现方式主要有两种:1,直接继承;2,组合。

  python支持多继承,一个子类可以继承多个基类(父类),但是一般情况下,一个子类只能有一个基类。

  继承概念的实现方式主要包括两类:实现继承和接口继承。

  继承的功能:1,直接调用父类方法;2,继承父类方法并重构父类方法,先重构,在重构的方法里手动调用父类方法;3,可以定义子类自己的方法;4,析构方法:__del__(self)。

   继承例子1:继承+重构    

 # Author:RYB
# __*__coding:utf-8__*__ class SchoolMember(object):
def __init__(self,name,age,sex):
self.name = name
self.age = age
self.sex = sex
def tell(self):
info = '''
---info of %s---
name:%s
age;%s
sex:%s
'''%(self.name,self.name,self.age,self.sex)
print(info) class Teacher(SchoolMember): #继承
def __init__(self,name,age,sex,salary):
SchoolMember.__init__(self,name,age,sex) #继承,调用SchoolMember类的初始化方法实现继承的目的。
self.salary = salary #重构 t=Teacher("lucy",28,"F",5000)
print(t.name,t.age,t.sex,t.salary)

运行结果:lucy 28 F 5000

    继承例子2:创建学校,老师,学生三个类。    

 # Author:RYB
# __*__coding:utf-8__*__ #学校类
class SchoolMember(object):
def __init__(self,name,age,sex):
self.name = name
self.age = age
self.sex = sex
def tell(self):
info = '''
---info of %s---
name:%s
age;%s
sex:%s
'''%(self.name,self.name,self.age,self.sex)
print(info) #老师类
class Teacher(SchoolMember): #继承
def __init__(self,name,age,sex,salary):
SchoolMember.__init__(self,name,age,sex) #继承,调用SchoolMember类的初始化函数(构造函数)实现继承的目的。
self.salary = salary #重构
def teaching(self,course):
print("%s is teaching %s"%(self.name,self.course)) #学生类
class Student(SchoolMember):
def __init__(self,name,age,sex,grade):
SchoolMember.__init__(self,name,age,sex)
self.grade = grade
def pay_tuition(self,total):
self.tuition = total
print("student %s has paid tuition fee total %s"%(self.name,total)) t=Teacher("lucy",28,"F",5000)
s=Student("lily",25,"M","p16")
s2=Student("lilei",35,"M","p17") t.tell()
s.tell()
s2.tell()

运行结果:

---info of lucy---
name:lucy
age;28
sex:F

---info of lily---
name:lily
age;25
sex:M

---info of lilei---
name:lilei
age;35
sex:M

    继承例子3:      

 # Author:RYB
# __*__coding:utf-8__*__ #学校类
class SchoolMember(object):
def __init__(self,name,age,sex):
self.name = name
self.age = age
self.sex = sex
def tell(self):
info = '''
---info of %s---
name:%s
age;%s
sex:%s
'''%(self.name,self.name,self.age,self.sex)
print(info) #老师类
class Teacher(SchoolMember): #继承
def __init__(self,name,age,sex,salary):
SchoolMember.__init__(self,name,age,sex) #继承,调用SchoolMember类的初始化函数(构造函数)实现继承的目的。
self.salary = salary #重构
def teaching(self,course):
print("%s is teaching %s"%(self.name,course)) #学生类
class Student(SchoolMember):
def __init__(self,name,age,sex,grade):
SchoolMember.__init__(self,name,age,sex)
self.grade = grade
def pay_tuition(self,total):
self.tuition = total
print("student %s has paid tuition fee total %s"%(self.name,total)) t=Teacher("lucy",28,"F",5000)
s=Student("lily",25,"M","p16")
s2=Student("lilei",35,"M","p17") t.teaching("python")
s.pay_tuition(1000)

运行结果:

lucy is teaching python
student lily has paid tuition fee total 1000

    继承例子4: 统计新学校成员(实例)的数量,如果成员被开除了,统计还剩多少成员。     

 # Author:RYB
# __*__coding:utf-8__*__ #学校类
class SchoolMember(object):
members=0
def __init__(self,name,age,sex):
self.name = name
self.age = age
self.sex = sex
SchoolMember.members+=1 #统计新学校成员数量
print("初始化了一个新学校成员",self.name)
def tell(self):
info = '''
---info of %s---
name:%s
age;%s
sex:%s
'''%(self.name,self.name,self.age,self.sex)
print(info)
def __del__(self): #析构方法,实例销毁时自动执行的事情(动作)。
print("%s被开除了" %self.name)
SchoolMember.members-=1 #老师类
class Teacher(SchoolMember): #继承
def __init__(self,name,age,sex,salary):
SchoolMember.__init__(self,name,age,sex) #继承,调用SchoolMember类的初始化函数(构造函数)实现继承的目的。
self.salary = salary #重构
def teaching(self,course):
print("%s is teaching %s"%(self.name,course)) #学生类
class Student(SchoolMember):
def __init__(self,name,age,sex,grade):
SchoolMember.__init__(self,name,age,sex)
self.grade = grade
def pay_tuition(self,total):
self.tuition = total
print("student %s has paid tuition fee total %s"%(self.name,total)) t=Teacher("lucy",28,"F",5000)
s=Student("lily",25,"M","p16")
s2=Student("lilei",35,"M","p17")
s3=Student("lili",15,"M","p18")
del s3
del s2 t.teaching("python")
s.pay_tuition(1000)
print(SchoolMember.members) #统计新学校成员数量

运行结果:

初始化了一个新学校成员 lucy
初始化了一个新学校成员 lily
初始化了一个新学校成员 lilei
初始化了一个新学校成员 lili
lili被开除了
lilei被开除了
lucy is teaching python
student lily has paid tuition fee total 1000
2
lucy被开除了
lily被开除了

 

python自动化开发-6-面向对象编程的更多相关文章

  1. python笔记 - day7-1 之面向对象编程

    python笔记 - day7-1 之面向对象编程 什么时候用面向对象: 多个函数的参数相同: 当某一些函数具有相同参数时,可以使用面向对象的方式,将参数值一次性的封装到对象,以后去对象中取值即可: ...

  2. python自动化开发学习 进程, 线程, 协程

    python自动化开发学习 进程, 线程, 协程   前言 在过去单核CPU也可以执行多任务,操作系统轮流让各个任务交替执行,任务1执行0.01秒,切换任务2,任务2执行0.01秒,在切换到任务3,这 ...

  3. python自动化开发学习 I/O多路复用

    python自动化开发学习 I/O多路复用   一. 简介 socketserver在内部是由I/O多路复用,多线程和多进程,实现了并发通信.IO多路复用的系统消耗很小. IO多路复用底层就是监听so ...

  4. Python自动化开发 - 面向对象(一)

    本节内容 1.编程范式 面向过程编程 面向对象编程 2.面向对象编程介绍 类的语法 类与实例内存分配 构造方法 自定义方法 3.面向对象特性 一.编程范式 编程是程序员 用特定的语法+数据结构+算法组 ...

  5. Python开发——9.面向对象编程

    一.面向对象设计(Object oriented design) 面向对象设计是将一类具体事物的数据和动作整合到一起的过程,不会要求面向对象语言编程,但如果想要构造具备对象性质和特点的数据类型,需要更 ...

  6. python 学习笔记7 面向对象编程

    一.概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发"更快更好更强..." ...

  7. 洗礼灵魂,修炼python(31)--面向对象编程(1)—面向对象,对象,类的了解

    面向对象 1.什么是面向对象 (图片来自网络) 哈哈,当然不是图中的意思. 1).面向对象(Object Oriented,OO)是软件开发方法.利用各大搜索引擎得到的解释都太官方,完全看不懂啥意思对 ...

  8. 洗礼灵魂,修炼python(40)--面向对象编程(10)—定制魔法方法+time模块

    定制魔法方法 1.什么是定制魔法方法 首先定制是什么意思呢?其实就是自定义了,根据我们想要的要求来自定义.而在python中,其实那些所谓的内置函数,内置方法,内置属性之类的其实也是自定义出来的,不过 ...

  9. python学习笔记(七):面向对象编程、类

    一.面向对象编程 面向对象--Object Oriented Programming,简称oop,是一种程序设计思想.在说面向对象之前,先说一下什么是编程范式,编程范式你按照什么方式来去编程,去实现一 ...

随机推荐

  1. css3 动画与display:none冲突的解决方案

    概述 css不能在display:none和display:block之间进行动画,并且也不能在height:0和height:auto之间进行动画.这里我研究了一下在display:none和dis ...

  2. DevOps - CI - 持续集成(Continuous Integration)

    初见 持续集成是什么? 持续集成基础概念介绍 持续集成服务器与工具集 了解 敏捷开发中的持续集成 使用Jenkins进行持续集成 案例 gitlab+gerrit+jenkins持续集成框架 使用Ge ...

  3. unity2d开发windows phone游戏按钮问题

    今天在进行unity2d项目对windows phone工程的编译过程中,发现了一个很蛋疼的bug,windows phone编译运行后,GUILayout.Button出现自动点击的现象,这带来了很 ...

  4. [Leetcode]59.螺旋矩阵Ⅱ

    给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵. 示例: 输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, ...

  5. ajax接口和后台交互

    //定义一个公众处理ajax的方法 function handelAjax(url,method,parm,callback) { $.ajax({ url:url, type:method, dat ...

  6. 在Hadoop集群上的Hive配置

    1. 系统环境Oracle VM VirtualBoxUbuntu 16.04Hadoop 2.7.4Java 1.8.0_111 hadoop集群master:192.168.19.128slave ...

  7. Atom编辑器中安装Emmet插件失败的问题

    今天使用Atom编辑器安装Emmet插件的时候,刚开始的时候报错: 报错内容如下: Installing “emmet@2.4.3” failed.Show output… Compiler tool ...

  8. Apache Commons Beanutils 一 (使用PropertyUtils访问Bean属性)

    BeanUtils简要描述 beanutils,顾名思义,是java bean的一个工具类,可以帮助我们方便的读取(get)和设置(set)bean属性值.动态定义和访问bean属性: 细心的话,会发 ...

  9. [疑难杂症]__点击win10屏幕最上方的边界会莫名其妙打开Internet Explorer浏览器,不胜其烦(2次ps:已解决!!!).

    关于问题描述: 每次误点到屏幕上边界会莫名打卡Internet Explorer浏览器(一开始开以为是自带的Edge浏览器,后来在查找相关解决方法的时候才发现并不是同一款浏览器) 这个问题存在好久了, ...

  10. SQL 必知必会·笔记<7>汇总数据——使用聚合函数

    有时候我们需要对表中的数据进行汇总,而不需要数据本身,为了方便这些类型的检索,SQL给出了5个聚合函数,SQL聚合函数在各主要的SQL实现中得到了相当一致的支持.如下: 1.1 AVG()函数 AVG ...