• 12 面向对象编程


    一 、面向对象与面向过程

      1.面向过程:一切以事物的流程为核心,核心是‘过程’,过程是解决问题的步骤,有先后顺序,的流水线思维。

        优点 :负责的问题流程化,编写相对简单

        缺点:可扩展性差

      2.面向对象:一切以对象为核心,比如汽车有轮子,方向盘,发动机,这些我们都可以使用程序把他们造出来。

        优点:可扩展性强

        缺点:编程复杂度高与面向过程

    二、面向对象的编写

      1.类的创建

      class Computer:

        pass

             以上完成了一个电脑的类的创建(相当于有了一张空白设计图纸)。

      而 c_r = Computer()  #相当于造了一台什么都没有的空白电脑。

       通过使用 “对象.特征”可以给电脑添加各种属性 c.color = 'red'  c.price = 4444等电脑的属性。

    而大多数的电脑都有颜色、cpu、价格等相同的属性,所以就可以将他们放入一个类中。

    class Computer:
        def __init__(self,name):
            self.name = name
    computer = Computer('lenovo')
    computer.price = '1000'
    computer.model = 'lenovo'
    computer.size = '14.5'
    print(computer.name)
    print(computer.size)
    
    computer2 = Computer('huawei')
    computer2.price = '2000'
    computer2.model = 'huawei'
    print(computer2.price)
    print(computer2.model)
    类和属性的创建

      2.方法的创建

      电脑还可以玩游戏,所以可以创建一个方法

    class Computer():
        def __init__(self,name,cpu,size,price):
            self.name = name
            self.cpu = cpu
            self.size = size
            self.price = price
        def play_game(self,name):#方法
            print('我的%s,不能打%s这个游戏,因为我用的cpu是%s,价格%s'%(self.name,name,self.cpu,self.price))
    c = Computer('联想','i9','17','30000')
    print(c.name)
    print(c.price)
    print(c.size)
    print(c.cpu)
    # print('c=',c)
    c.play_game('魂斗罗')
    方法的创建

     总结:    类与对象的关系:  类是对事物的总结. 抽象的概念. 类⽤来描述对象. 对象是类的实例化的结果. 对象能执⾏哪些方法. 都由类来决定. 类中定义了什么对象就拥有什么

    三、面向对象的三大特征

       面向对象三大特征: 封装, 继承, 多态. 只要是⾯向对象编程语⾔. 都有这三个特征.

        1. 封装: 把很多数据封装到一个对象中. 把固定功能的代码封装到一个代码块, 函数, 对 象, 打包成模块. 这都属于封装的思想. 具体的情况具体分析. 比如. 你写了一个很⽜B 的函数. 那这个也可以被称为封装. 在面向对象思想中. 是把一些看似⽆无关紧要的内容 组合到一起统一进行存储和使用. 这就是封装.

         2. 继承: 子类可以自动拥有父类中除了私有属性外的其他所有内容. 说白了, 儿⼦可以 随便用爹的东西. 但是朋友们, 一定要认清楚⼀个事情. 必须先有爹, 后有⼉子. 顺序不 能乱, 在python中实现继承非常简单. 在声明类的时候, 在类名后面添加一个小括号, 就可以完成继承关系. 那么什么情况可以使⽤用继承呢? 单纯的从代码层面上来看. 两 个类具有相同的功能或者特征的时候. 可以采用继承的形式. 提取一个父类, 这个⽗类 中编写着两个类相同的部分. 然后两个类分别取继承这个类就可以了. 这样写的好处 是我们可以避免写很多重复的功能和代码. 如果从语义中去分析的话. 会简单很多. 如
    果语境中出现了了x是⼀种y. 这时, y是一种泛化的概念. x比y更加具体. 那这时x就是y的 子类. 比如. 猫是一种动物. 猫继承动物. 动物能动. 猫也能动. 这时猫在创建的时候就 有了了动物的"动"这个属性. 再比如, 白骨精是一个妖怪. 妖怪天⽣就有一个比较不好 的功能叫"吃人",  白骨精⼀出生就知道如何"吃⼈人". 此时 白骨精继承妖精. 

    class Yao:    
        def chi(self):        
            print("我是妖怪, 我天生就会吃人")
    class BaiGuJing(Yao):   # 白骨精继承妖怪    
        pass
    bgj = BaiGuJing() 
    bgj.chi()   # 我是妖怪, 我天生就会吃⼈人  # 虽然白骨精类中没有编写chi. 但是他爹有啊. 直接拿来⽤用        
    View Code

        3. 多态: 同一个对象, 多种形态. 这个在python中其实是很不容易说明白的. 因为我们⼀ 直在用. 只是没有具体的说.  比如. 我们创建一个变量a = 10 , 我们知道此时a是整数 类型. 但是我们可以通过程序让a = "alex", 这时, a又变成了字符串类型.  这是我们都 知道的. 但是, 我要告诉你的是. 这个就是多态性. 同一个变量a可以是多种形态. 可能 这样的程序和说法你还get不到具体什是多态. 接下来. 我们来看一个程序. 北京动 物园饲养员alex一天的工作. 从早上开始喂养猪, 中午喂哈士奇, 晚上还得喂阿拉斯加. 来我们用代码实现这样的代码:  

    class Baigujin:
        def teng(self):
            print('白骨精痛')
    
    class Zhizhujin:
        def teng(self):
            print('蜘蛛精痛')
    
    class Heixiongjin:
        def teng(self):
            print('黑熊精痛')
    class Swukong:
        # def dahei(self,hei):
        #     hei.teng()
        # def dabai(self,bai):
        #     bai.teng()
        # def dazhi(self, zhi1):
        #     zhi1.teng()
        def da(self, yaojin):
            yaojin.teng()
    wukong = Swukong()
    zhi = Zhizhujin()
    wukong.da(zhi)
    
    wukong = Swukong()
    hei = Heixiongjin()
    wukong.da(hei)
    
    wukong = Swukong()
    bai = Baigujin()
    wukong.da(bai)
    View Code

       

  • 相关阅读:
    python
    python
    python
    python
    python
    python
    python
    python
    [ThinkPHP] 从一个表中获得栏目对应的ID,从另一个表获得属于这些栏目的文章
    [thinkPHP] buildSql可以查看tp CURD操作对应的SQL
  • 原文地址:https://www.cnblogs.com/-0121/p/9925564.html
Copyright © 2020-2023  润新知