Day-14 初识面向对象

一、面向对象和面向过程

  1.面向过程:一切以事物的流程为核心,核心是“过程”二字(流水线),是一种机械式的编程思维

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

    缺点:可扩展性差

  2.面向对象:一切以对象为中心

    优点:可扩展性强

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

  万事万物皆为对象

二、面向对象如何编写

  使用类可以创建对象:
  class 类名(object):
    def __init__(self, name, age): # 构造方法. 创建对象的时候自动调用这个方法
      self.name = name
      self.age = age

    def 方法名(self, 参数):
      方法体(return)

  创建对象:
    变量(引用, 句柄) = 类名(参数)

    # 访问对象的属性信息
    对象.属性
    # 方法的访问:
    对象.方法()

class Car:
    def __init__(self, color, pai, pailiang):    # self表示当前类的对象. 当前你创建的是谁, 谁来访问的这个方法.那这个self就是谁.
        self.color = color
        self.pai = pai
        self.pailiang = pailiang
     def run(self, speed):
         print("⻋可以跑%s迈" % speed)

c = Car("red", "京A66666", "2.0T")
c.run(100)  # 这时. python会自动把对象c传递给run方法的第一个参数位置. 

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

  对比面向对象和面向过程:

    看需求

    大型项目更适合用面向对象

    小型脚本程序更适合面向过程

三、面向对象的三大特征

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

  1.封装

    对属性封装:self.xxx = xxxx

    对方法封装

  2.继承

    子类可以自动拥有父亲中除了私有内容外的其他所有内容

class Yao:

    def chi(self):
        print("我是妖怪, 我天生就会吃人")

class BaiGuJing(Yao): # 白骨精继承妖怪
    pass

bgj = BaiGuJing()
bgj.chi()   # 我是妖怪, 我天生就会吃人 # 虽然白骨精类中没有编写chi. 但是他爹有啊. 直接拿来用

    多继承

class QinDie:
    def chi(self):
        print("亲爹给你好吃的")
    def play(self):
        print("亲爹会陪你玩")

class GanDie:
    def qian(self):
        print("干爹给钱啊")
    def play(self):
        print("干爹会陪你玩")

class GuNiang(QinDie, GanDie):
    pass

bumei = GuNiang()
bumei.chi() # 亲爹
bumei.qian() # 亲爹没有, 找干爹
bumei.play() # 亲爹有了, 就不找干爹了

  3.多态

    同一个对象对重形态

class Animal:
    def chi(self):
        print("动物就知道吃")
class Pig(Animal):
    def chi(self):
        print("猪在吃")
class Haski(Animal):
    def chi(self):
        print("哈士奇在吃")
class Alasika(Animal):
    def chi(self):
        print("阿拉斯加在吃")
 
class SiYangYuan:
    def yanng_animal(self, ani):
        ani.chi()
 
zhu = Pig()
erha = Haski()
ala = Alasika()

alex = SiYangYuan()
alex.yanng_animal(zhu)
alex.yanng_animal(erha)
alex.yanng_animal(ala)
原文地址:https://www.cnblogs.com/minusone/p/9917401.html