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
原创粉丝点击