【python学习】python的面向对象编程

中国史之【寒浞夺政】:
寒浞(zhuo),原为后羿之相,后来杀死后羿,夺取有穷氏政权,随后又消灭了夏王相,使自太康失国以来分裂了54年的天下重新统一。
-来源:全历史APP

今天讲python的面向对象编程。有需要的也可以直接去我的github查看全部笔记:
https://github.com/JackKoLing/python_notes_with_ten_days
【python学习】python的面向对象编程_第1张图片
俗话说:“好记性不如烂笔头”,多写写多记记,总不会错。多一些不为什么的坚持,少一些功利主义的追求。对于环境的配置,可以参考以下两篇:

  • win10版 @小保,公众号:CV之道
    【深度学习环境配置】手把手实战配置深度学习环境(win10版)
  • Linux版 @小保,公众号:CV之道
    【深度学习环境配置】手把手实战配置深度学习环境(Ubuntu20.04版)

1 面向对象编程(OOP)

  • 程序 = 算法(指令)+ 数据,代码可以选择以指令为核心或以数据为核心进行编写

两种范型:

  • 面向过程编程:以指令为核心,程序具有一系列线性步骤,阐述算法的步骤,主体思想是代码作用于数据
  • 面向对象编程(OOP):以数据为核心,围绕数据及为数据严格定义的接口来组织程序,用数据控制对代码的访问

2 面向对象的核心概念

(1)所有编程语言最终目的都是提供一种“抽象”方法

  • 在机器模型(“解空间”或“方案空间”)与实际解决的问题模型(“问题空间”)之间,程序员必须建立一种联系
  • 面向过程:程序 = 算法 + 数据结构
  • 面向对象:将问题空间中的元素以及它们在解空间中的表示物抽象为对象,并允许通过问题来描述问题而不是方案。可以把实例想象成一种新型变量,它保存着数据,但可以对自身的数据执行操作
l1 = [1, 2, 3] # 这就是一个列表实例,可以想象成一种新型变量
print(l1.pop()) # 可以对自身的数据执行操作,但这些操作必须是本来定义好的
>>>
3

(2)类型由状态集合(数据)和转换这些状态的操作集合(内置函数)组成
类抽象:

  • 类:定义了被多个同一类型对象共享的结构和行为(数据和代码,即类的成员)
  • 类是抽象的,不能操作。只有实例成具体的对象,含有数据才能操作
  • 数据:成员变量或实例变量,也就是属性
  • 成员方法:简称方法,也就是函数,是操作变量的代码,用于定义如何使用成员变量。因此一个类的行为和接口是通过方法来定义的
  • 变量和方法分为:(1)私有,内部使用;(2)公共:外部可见

3 面向对象的程序设计方法

  • 所有东西都是对象
  • 程序是一大堆对象的组合。通过消息(调用请求)传递,各对象知道自己该做什么
  • 每个对象都有自己的存储空间,并可容纳其他对象。通过封装现有对象,可以制作成新型对象
  • 每个对象(类的实例)都属于某一类型。类的一个重要特性为“能发什么样的消息给它”,即内置接口是限定的
  • 同一个类的所有对象都能接受相同的消息,因为方法是类内定义的

4 类间关系

  • 依赖(“uses-a”):一个类的方法操纵另一个类的对象
  • 聚合(“has-a”):类A的对象包含类B的对象,如l1=[‘a’,‘b’]这就是列表类对象包含字符串类的对象
  • 继承(“is-a”):描述特殊与一般关系,如汽车是车

5 面向对象编程的三个原则

(1)封装(Encapsulation)

  • 隐藏实现方案细节
  • 将代码及处理的数据绑定在一起的一种编程机制,用于保证程序和数据不受外部干扰且不会被误用
  • 比如:sort()就是一种封装了的排序,你无须深入了解具体怎么实现排序的,只需要给数据就行
  • 又比如:你要开车,不需要去了解引擎怎么制作,只需要插入钥匙,掌握开车的技巧

(2)继承(Inheritance)

  • 一个对象获得另一个对象属性的过程;用于实现按层分类的概念
  • 一个深度继承的子类继承了类层次中它的每个祖先的所有属性
  • 超类、基类、父类都是一个概念
  • 子类、派生类都是一个概念
  • 比如:动物分为哺乳动物和爬行动物,哺乳动物又分为犬科动物和猫科动物。那么动物能呼吸的属性,犬科动物也有

(3)多态(Polymorphism)

  • 允许一个接口被多个通用的类动作使用的特性,具体使用哪个动作与应用场合相关
  • “一个接口,多个方法”,用于为一组相关的动作设计一个通用的接口,以降低程序复杂性
# 这就是“一个接口,多个方法”
def plus(x, y):
    print(x+y)

plus('a', 'b')
plus([1, 2, 3], ['a', 'b', 'c'])
>>>
ab
[1, 2, 3, 'a', 'b', 'c']

【声明】:学习笔记基于互联网上各种学习资源的个人整理。

以上是本期内容,下期介绍python的类和实例。

我叫小保,一名计算机视觉爱好者、学习者、追随者,欢迎关注我一起学习。

你可能感兴趣的