python学习(5)
来源:互联网 发布:dnf一直网络中断 编辑:程序博客网 时间:2024/06/05 04:33
面向对象编程简述
- 面向对象编程——Object Oriented Programming,简称 OOP,把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数
- 面向过程把函数继续切分为子函数,来降低系统的复杂度
- 面向对象编程是一种编程方式,编程方式的实现需要使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就是对 “类” 和 “对象” 的使用
类:
- Python 中,所有数据类型都可以视为对象,当然也可以自定义对象。自定义的对象数据类型就是面向对象中的类(Class)
三大特性:封装,继承与多态
1.封装:
- 封装,顾名思义就是将内容封装到某个地方,以后再去调用被封装在某处的内容;封装的另一个作用是可以给类添加新方法
- 下面就是将”小明”, 18, “男” 信息分别封装到xiaom和self中的name,age和gender属性中:
class People(object): def __init__(self, name, age, gender): self.name = name self.age = age self.gender = gender def kaiche(self): print "%s %d岁 %s 开车娶媳妇" % (self.name, self.age, self.gender)xiaom = People("小明", 18, "男")xiaom.kaiche()
print xiaom.name 可直接调用xiaom对象的name属性,终端会输出“小明”
- 也可以通过self调用,下图是将xiaom对象中的name,age和gender属性调用,终端会输出“小明 18岁 男 开车去娶媳妇”
def kaiche(self): print "%s %d岁 %s 开车去娶媳妇" % (self.name, self.age, self.gender)
2.继承:
- 通俗来说和子承父业,继承遗产一样,对于面向对象的继承来讲,就是将多个类共有的方法提取到父类中去,而子类只需要继承父类的方法,不需要一一实现每个方法;
- 在面向对象中子类也称作(派生类),父类也称作(基类)
- 多继承:
- python的类可以继承多个,Java和C#只能单继承;
- 继承多个类,有两种算法:深度优先算法和广度优先算法;
- 当类为经典类(class C:)时,多继承时使用深度优先算法;
- 当类为新式类(class C(object))时,多继承时使用广度优先算法;
eg: D, C(D), B(D), A(B,C)
深度优先:A->B->D->C
广度优先: A->B->C->D
- 也可简单来看,在定义类D时后面有加object就是新式类,没有就是经典类
class D(object): # 新式类 class D: # 经典类 def eat(self): print "D eating" passclass C(D): def eat(self): print "C eating"class B(D): def run(self): print "runing" def eat(self): print "B eating"class A(B,C): pass a = A() a.eat()
- 经典类:首先去A类中查找,如果A类中没有,则继续去B类中找,如果B类中没有,则继续去D类中找,如果D类中没有,则继续去C类中找,如果还是未找到,则报错
- 新式类:首先去A类中查找,如果A类中没有,则继续去B类中找,如果B类中没有,则继续去C类中找,如果C类中没有,则继续去D类中找,如果还是未找到,则报错
不管是新式类还是经典类,在查找过程中,一旦找到,则寻找过程立即中断,便不会再继续找了
3.多态:
多态意思是“有多种形式”。多态意味着就算不知道变量所引用的对象类是什么,还是能对它进行操作,而它也会根据对象(或类)类型的不同而表现出不同的行为。
如果子类调用的方法,子类没有,父类有,运行父类;
- 如果子类调用的方法,子类有,父类也有,只运行子类的;
基本框架,请点击下面“基本框架”查看:
基本框架
练习:
创建一个小游戏:
1.游戏人物: 小明,男,18岁,初始战斗力2000 小李,男,19岁,初始战斗力2500 小薇,女,18岁,初始战斗力10002.游戏场景: 墨家机关道:消耗100战斗值 王者峡谷:消耗150战斗值 长平攻防战:消耗200战斗值 深渊大乱斗:消耗300战斗值 火焰山大战:消耗500战斗值
脚本编写:
import time #导入time模块class People(object): #定义一个类 People def __init__(self,name,gender,age,value): self.name = name self.gender = gender self.age = age self.value = value def mo(self): #将游戏场景定义为方法 print "欢迎%s %s %d岁 战斗值%s进入墨家机关道"%(self.name,self.gender,self.age,self.value) time.sleep(0.5) #设定游戏时间 self.value -= 100 #进入游戏场景消耗的战斗值 def King(self): #将游戏场景定义为方法 print "欢迎%s %s %d岁 战斗值%s进入王者峡谷"%(self.name,self.gender,self.age,self.value) time.sleep(0.5) self.value -= 150 def changp(self): #将游戏场景定义为方法 print "欢迎%s %s %d岁 战斗值%s进入长平攻防战"%(self.name,self.gender,self.age,self.value) time.sleep(1) self.value -= 200 def shengy(self): #将游戏场景定义为方法 print "欢迎%s %s %d岁 战斗值%s进入深渊大乱斗"%(self.name,self.gender,self.age,self.value) time.sleep(1.5) self.value -= 300 def huo(self): #将游戏场景定义为方法 print "欢迎%s %s %d岁 战斗值%s进入火焰山大战"%(self.name,self.gender,self.age,self.value) time.sleep(2) self.value -= 500 def detail(self): #查看人物状态 temp = "姓名:%s 性别:%s 年龄:%d岁 战斗值:%d"%(self.name,self.gender,self.age,self.value) print tempxm = People("小明","男",18,2000) #将人物信息封装xl = People("小李","男",19,2500)xw = People("小薇","男",18,1000)xm.detail() #调用查看状态的方法,查看人物信息xl.detail()xw.detail()xm.mo() #调用方法,这里即进入游戏xl.shengy()xw.huo()xm.detail() #调用查看状态的方法,查看人物战斗后信息xl.detail()xw.detail()
脚本运行效果:
/usr/bin/python2.7 /root/PycharmProjects/Pycharm07/youxi3.py姓名:小明 性别:男 年龄:18岁 战斗值:2000姓名:小李 性别:男 年龄:19岁 战斗值:2500姓名:小薇 性别:男 年龄:18岁 战斗值:1000欢迎小明 男 18岁 战斗值2000进入墨家机关道欢迎小李 男 19岁 战斗值2500进入深渊大乱斗欢迎小薇 男 18岁 战斗值1000进入火焰山大战姓名:小明 性别:男 年龄:18岁 战斗值:1900姓名:小李 性别:男 年龄:19岁 战斗值:2200姓名:小薇 性别:男 年龄:18岁 战斗值:500
阅读全文
0 0
- Python学习笔记(5)
- python学习笔记5
- python学习笔记5
- Python 学习笔记 - 5
- Python 学习笔记 5
- python 学习笔记5
- 英语学习5 python
- Python学习笔记5
- python 学习笔记5
- python学习5
- python学习5:requests
- python学习5
- python学习5
- Python学习(5)
- Python 学习笔记(5)
- Python--学习旅程5
- Python学习笔记5
- Python爬虫学习5
- android自定义控件之三角绕圆环旋转 +改变速度+改变颜色
- hdu 4734 数位dp #2
- 三 、C++输入不确定长度的字符串&&元素个数
- python五之for删除陷阱
- Linux学习中遇到的命令积累
- python学习(5)
- 杭电多校联赛2017年总结
- 使用Tomcat数据源
- java常问题整理,慢慢更
- MFC 连接Oracle 数据库
- WOJ1152-Feli的糖果
- 1299 Polar Explorer
- js设计模式--外观模式
- 将一个句子逆序