zoukankan      html  css  js  c++  java
  • day015面向对象(初识)编写及其三大特征

    主要内容

    ·什么是面向过程
    ·什么是面向对象
    ·编写面向对象程序
    ·面向对象的三大特征:封装、继承、多态

    一、面向对象和面向过程

    1、两者的比较分析

    面向过程:

    1.以事物的流程为核心,核心是过程“过程”二字,指解决问题的步骤,即先干什么,后干什么;
    2.优点:对问题的处理具体化,流程化,编写相对简单;
    3.缺点:可扩展性差,对源代码的增删改,会产生全局的变化。

    面向对象:

    1.一切以对象为中心,不再是事物发展的流程,而是操纵某一个事物的个体(对象)
    2.优点:可扩展性强
    3.缺点:编程的复杂度高于面向过程

    2、如何选用两者,看需求

    1.大型项目更适合于面向对象
    2.小型脚本程序更适合于面向过程

    二、编写面向对象的程序(重点)

    1、语法

    ·1.先创建类,归类,对你要面对的对象归类总结,相当于图纸
    ·2.使用类创建对象
    class 类名(object):  # object是根源,默认的不用写
        def __init__(self, age): # 构造方法,创建对象的时候自动调用这个方法,self是创建的对象本身
            self.age = age   # 存放共同的属性,
    
        def 方法名(self, 参数):  # 方法,跟函数一样的功能
            方法体
    
    创建对象:
    变量(引用,类似句柄) = 类名(参数)
    
    # 访问对象的属性信息
        对象.属性
    
    # 方法的访问:
        对象.方法()

    fe: 具体创建示例

    # 类名首字母大写.
    class Computer:
    
        # 构造方法. 在创建的对象的时候由系统自动访问这个方法
        # self: 自己. 自身. 类的对象. 当前正在创建的对象
        def __init__(self, pinpai, price, cpu, neicun): # 谁在调用, self就是谁, self 由python自动传递,
            # 此处就是封装
            self.pinpai = pinpai
            self.price = price
            self.cpu = cpu
            self.neicun = neicun
    
        # 方法. 该类型的对象能够执行哪些操作
        def dayouxi(self, game): # 谁调用的这个方法. self就是谁
            # 我用我的self.pinpai的调用. 利用很牛B的self.cpu来完成吃鸡操作
            # 对方法进行封装
            print("我要打游戏, 我要%s" % game)
    
    c = Computer("微软",25000,"i9","5T") # 创建对象
    
    print(c.price) # 访问对象属性,需打印
    
    c.dayouxi("吃鸡")  # 访问方法,等同于函数的调用

    三、面向对象的三大特征

    1、封装

    把各种内容组合到一起,统一进行存储和使用,这就是封装。

    1.对属性封装

    def __init__(self, name)
        self.name = name # 对属性的封装

    2.对方法的封装

    def __init__(self, name)
        self.name = name # 对属性的封装
    
      # 对方法的封装
    def login(self):
        pass
    def regist(self):
        pass
    def update_psw(self):
        pass

    2、继承

    继承: 子类自动拥有父类中除了私有内容外的其他所有内容

    1.单继承

    继承调用的顺序:
    子类没有,调用父类的(子无调父)
    子类有,先用子类的,不用父类(子有用己)
    子类还可以在父类的基础上派生,扩展,说白了,子类的范围可以大于父类的(子拓父业)
    fe1: 子无调父
    class Niu:
        def da(self):
            print("牛魔王打架很厉害")
    
    class HongHaiEer(Niu):  # 这样写是继承Niu的非私有内容
        pass
    
    hhl = HongHaiEer()
    
    hhl.da()   # 此时调用父类的方法,打印父类的
    fe2: 子有用己,子拓父业
    class Niu:
        def da(self):
            print("牛魔王打架很厉害")
    
    class HongHaiEer(Niu):
        def da(self):
            print("喷火")
    
        def fei(self):
            print("风火轮") #  子类在父类的基础上扩展了一些功能. 派生
    
    hhl = HongHaiEer()
    
    hhl.da()  # 此时先调用自己的方法

    2、多继承

    调用顺序
    自己有就用自己的,
    没有的就调用父类的,以 class c(fu2, fu1) 靠近的顺序调用,fu2的顺序比fu1的近,
    fe: 调用顺序
    class Foo1:
        def money(self):
            print("有钱")
    
    class Foo2:
        def play(self):
            print("玩儿")
    
        def money(self):
            print("没钱")
    
    class Bar(Foo2, Foo1): # MRO c3算法
        pass
    
    b = Bar()
    b.money() # Foo2离得近,所以先调用,打印 “没钱”

    3、多态

    同一个对象. 拥有多种形态 java c++
    python自带多态,我们一直在用
    好处:超高的扩展性,面向对象的核心和思想
    fe: python多态的体现
     在python中多态的效果感受不够明确
    class YaoGuai:
        def teng(self):  # 方法封装
            print("妖怪一定会疼")
    
    class ZhiZhuJing(YaoGuai):
        def teng(self):
            print("蜘蛛精很痛")
    
    class HeiXiongJing(YaoGuai):
        def teng(self):
            print("黑熊精也很疼")
    
    class BaiGuJing(YaoGuai):
        def teng(self):
            print("白骨精骨头很疼")
    
    class JinJiaoDaWang(YaoGuai):
        def fangundeteng(self):
            print("爆炸的疼")
    
    class SunWuKong:
        def da(self, yg):  # 封装
            yg.teng() #  只要包含了xxx功能的内容都可以试用. 鸭子模型  ->  多态性
    
    # 西游记开始
    swk = SunWuKong()
    
    hxj = HeiXiongJing()
    swk.da(hxj)
    
    bgj = BaiGuJing()
    swk.da(bgj)
    
    zzj = ZhiZhuJing()
    swk.da(zzj)
    
    alex = JinJiaoDaWang()
    swk.da(alex)
  • 相关阅读:
    cannot import name 'PILLOW_VERSION'
    scala spark2.0 rdd dataframe 分布式计算欧式距离
    scala spark dataframe 修改字段类型
    获取cookie脚本
    Loadrunner 获取请求的返回结果函数web_reg_save_param
    Python模拟接口登录
    web自动化上传附件 2
    Web自动化附件上传
    robotframework 连接mysql数据库
    Json格式获取接口返回的值
  • 原文地址:https://www.cnblogs.com/yipianshuying/p/9917742.html
Copyright © 2011-2022 走看看