python 面向对象三剑客

一、什么是面向对象,什么是面向过程

面向过程
特点:做一件事,注重过程,步骤和细节,如流程图,按流程图做完一件事
面向对象
特点:做一件事,注重结果,如属性图,方法表组成的对象调用方法或属性完成一件事


类事务的统称,是抽象的
方法
一类事物的具体表现形式
    特征(属性)
    行为(方法)
 

 二、面向对象三大特征

1、封装

概念
  封装操作可以对受访问保护的成员进行约定的功能开放的控制,达到保护数据不被非法访问的目的,也可以将具有同类属性和方法的的特性封装在一个方法中,后期维护代码比较方便
封装层次
第一个层面的封装:类就是麻袋,这本身就是一种封装
第二个层面的封装:类中定义私有的,只有在类的内部使用,外部无法访问
第三个层面的封装:明确区分内外,内部的实现逻辑,外部无法知晓,并且为封装到内部的逻辑提供了一个访问接口给外部使用
class Person:
    """ 默认体力100
    吃饭恢复体力20
    睡觉恢复体力50
    学习消耗体力30
    锻炼消耗体力20
    """

    def __init__(self):
        self.Power = 100
        self.name = None

    def __change_HP(self, num, action):
        if num > 0:
            self.Power += num
            # print("正在%s,当前的体力值%d" % (action, self.Power))
            if self.Power > 100:
                print("体力值已经爆满,战斗力超强")
                self.Power = 100
            else:
                print("正在%s,当前的体力值%d" % (action, self.Power))
        else:
            self.Power += num
            if self.Power < 0:
                self.Power -= num
                print("体力已经用完,无法完成%s" % action)
            else:
                print("%s正在%s,当前恢复的体力值为%d" % (self.name, action, self.Power))

    def eat(self):
        self.__change_HP(20, "吃饭")
        # if self.Power >= 0 and self.Power < 100:
        #     self.Power += 20
        #     print("正在吃饭,当前的体力值%d" %(self.Power))
        # else:
        #     print("该体力值爆满,不在需要吃饭")

    def sleep(self):
        self.__change_HP(50, "睡觉")
        # if self.Power >= 0 and self.Power < 100:
        #     self.Power += 50
        #     print("正在吃饭,当前的体力值%d" % (self.Power))
        # else:
        #     print("该体力值爆满,不在需要睡觉")

    def study(self):
        self.__change_HP(-30, "学习")
        # if self.Power > 30:
        #     self.Power -= 30
        #     print("正在吃饭,当前的体力值%d" % (self.Power))
        # else:
        #     print("该体力值爆满,不在需要睡觉")

    def run(self):
        self.__change_HP(-45, "跑步")
        # if self.Power > 45:
        #     self.Power -= 45
        #     print("正在吃饭,当前的体力值%d" % (self.Power))
        # else:
        #     print("该体力值爆满,不在需要睡觉")

    def __str__(self):
        return "当前体力值为%d" % (self.Power)


p = Person()
p.name = "小明"
p.sleep()
p.run()
p.run()
p.run()
View Code

 

2、继承

概念
  子类可以拥有父类所有公有的属性和方法,方便代码统一管理,提高代码的可读性,方便代码后期的扩展
对象查找属性的顺序
  对象自己的 - > 所在类中 -> 找父类 - >父类的父类 ->Object
单继承
  继承一个父类
多继承
  继承多个父类
组合
  一种有的概念,例如人有手机,特点,在一个类A中,使用另一个类B的对象作为类A的数据属性(特征)(变量),成为类的组合。

 

class Animals:
    def __init__(self, name):
        self.name = name       
    def walk(self):
        print('我会走')
class People(Animals):#单继承
    def __init__(self, name, mobile):
        self.name = name
        self.mobile = mobile
class Mobile():
    def __init__(self, color):
        self.color = color
    def call(self):
          print('老子可以打电话') 

mobile = Mobile('yellow')
people = People('hi', mobile)#组合
people.mobile.call()#组合后调用b类的方法
View Code
class Swan(Tiger,Peacock):#多继承
    def feahter(self):
        print("我天鹅的毛很白")  
View Code

 

3、多态

概念
    一个对象具有多种形态,在不同的使用环境中以不同的形态展示其功能,称该对象具有多态特征,特点,有继承,有重写
多态分类有普通多态和鸭子类型 鸭子类型 概念 当对象在语法层面能够满足调用关系,但对象并不具有对应的对象形态 具体来讲关注的不是对象的类型本身,而是它是如何使用的。类与类之间不用共同继承一个父类,只需要将它们做得像一种事物即可

 

posted @ 2020-08-12 16:52  inhocho  阅读(18)  评论(0)    收藏  举报