面向对象

114 阅读2分钟

语法

  • 实例变量:不同个体的不同数据 [自己]
  • 实例方法:操作实例变量
  • 类变量:不同个体的相同数据 [大家]
  • 实例方法:操作类变量

思想

  • 封装[分]:根据需求划分为多个类 [每个变化点单独定义到类中]
  • 继承[隔]:统一多个子类型的行为,隔离客户端代码与变化点.
  • 多态[做]:子类通过重写实现具体功能

目标

  • 开闭原则:增加新功能,不修改客户端代码.

例:老张开车去东北

思想图

老张开车去东北设计思想.jpg

代码

"""
面向对象来实现
1。老张开车去东北

2。用面向对象思想。在不改变客户端代码情况下,需求改成老张开飞机去东北

"""


class Person:
    def __init__(self, name=""):
        self.name = name

    def go_to(self, vehicle, position):
        print(self.name,"开",end="")
        vehicle.run()
        print(position)


class Transportation:
    def run(self):
        pass


class Car(Transportation):
    def run(self):
        print("车去",end="")


lz = Person("老张")
lz.go_to(Car(), "东北")


# 新需求
class Aircraft(Transportation):
    def run(self):
        print("飞机去",end="")
        
lz.go_to(Aircraft(), "东北")

总结

  1. 封装
  • 数据角度
(1) 定义:
将一些基本数据类型复合成一个自定义类型。 
(2) 优势:
将数据与对数据的操作相关联。
代码可读性更高(类是对象的模板)。
  • 行为角度
(1) 定义: 向类外提供必要的功能,隐藏实现的细节。
(2) 优势: 简化编程,使用者不必了解具体的实现细节,只需要调用对外提供的功能。
  1. 继承
(1) 概念: 重用现有类的功能,并在此基础上进行扩展。
(2) 说明:子类直接具有父类的成员(共性),还可以扩展新功能。
  1. 多态
类似魔法函数
如增加新需求,在不改变客户端代码情况下,我们在自定义类中重写,从而改变起行为