• Python语法(3)- 面向对象


    1 成员方法

    1.1 类的定义和使用

    class 类名称:
    	类属性
    	类行为
    
    • 1
    • 2
    • 3

    创建类对象的语法:

    对象 = 类名称()
    
    • 1

    1.2 成员变量和成员方法

    在这里插入图片描述

    1.3 成员方法的定义语法

    在类中定义成员方法和定义函数基本一致,但仍有细微区别:

    在这里插入图片描述
    可以看到,在方法定义的参数列表中,有一个:self关键字
    self关键字是成员方法定义的时候,必须填写的

    • 它用来表示类对象自身的意思
    • 当我们使用类对象调用方法的是,self会自动被python传入
    • 在方法内部,想要访问类的成员变量,必须使用self

    在这里插入图片描述
    注意事项
    self关键字,尽管在参数列表中,但是传参的时候可以忽略它。

    2 构造方法

    属性(成员变量)的赋值

    构造方法
    Python类可以使用:__init__()方法,称之为构造方法。
    可以实现:
    在创建类对象(构造类)的时候,会自动执行
    在创建类对象(构造类)的时候,将传入参数自动传递给__init__方法使用
    在这里插入图片描述
    构建类时传入的参数会自动提供给__init__方法
    构建类的时候__init__方法会自动执行

    3 其它内置方法

    魔术方法

    在这里插入图片描述

    __str__ 字符串方法

    在这里插入图片描述
    当类对象需要被转换为字符串之时,会输出如上结果(内存地址),内存地址没有多大作用,我们可以通过__str__方法,控制类转换为字符串的行为。
    在这里插入图片描述

    • 方法名:str
    • 返回值:字符串
    • 内容:自行定义
    __lt__ 小于符号比较方法

    在这里插入图片描述

    __le__ 小于等于比较符号方法

    魔术方法:__le__可用于:<=、>=两种比较运算符上。
    在这里插入图片描述

    __eq__比较运算符实现方法

    在这里插入图片描述

    • 不实现__eq__方法,对象之间可以比较,但是是比较内存地址,也即是:不同对象==比较一定是False结果。
    • 实现了__eq__方法,就可以按照自己的想法来决定2个对象是否相等了。

    在这里插入图片描述

    4 封装

    4.1 私有成员

    定义私有成员的方式非常简单,只需要:

    • 私有成员变量:变量名以__开头(2个下划线)
    • 私有成员方法:方法名以__开头(2个下划线)

    即可完成私有成员的设置。
    在这里插入图片描述

    4.2 使用私有成员

    私有方法无法直接被类对象使用
    在这里插入图片描述
    私有变量无法赋值,也无法获取值
    在这里插入图片描述
    在这里插入图片描述

    5 继承

    5.1 单继承

    在这里插入图片描述
    继承分为:单继承和多继承
    使用如图语法,可以完成类的单继承。
    继承表示:将从父类那里继承(复制)来成员变量和成员方法(不含私有)。

    5.2 多继承

    在这里插入图片描述

    • 注意事项:
      多个父类中,如果有同名的成员,那么默认以继承顺序(从左到右)为优先级。即:先继承的保留,后继承的被覆盖。
    • pass关键字
      pass是占位语句,用来保证函数(方法)或类定义的完整性,表示无内容,空的意思。

    5.3 复写

    子类继承父类的成员属性和成员方法后,如果对其“不满意”,那么可以进行复写。即:在子类中重新定义同名的属性或方法即可。
    在这里插入图片描述

    5.4 调用父类同名成员

    一旦复写父类成员,那么类对象调用成员的时候,就会调用复写后的新成员,如果需要使用被复写的父类的成员,需要特殊的调用方式:

    • 方式1:调用父类成员
      使用成员变量:父类名.成员变量
      使用成员方法:父类名.成员方法(self)

    • 方式2:使用super()调用父类成员
      使用成员变量:super().成员变量
      使用成员方法:super().成员方法()

    只能在子类内调用父类的同名成员,子类的类对象直接调用会调用子类复写的成员。

    案例:
    在这里插入图片描述

    6 类型注解

    6.1 定义

    Python在3.5版本的时候引入了类型注解,以方便静态类型检查工具,IDE等第三方工具。
    类型注解:在代码中涉及数据交互的地方,提供数据类型的注解(显式的说明)。

    主要功能:

    • 帮助第三方IDE工具(如PyCharm)对代码进行类型推断,协助做代码提示
    • 帮助开发者自身对变量进行类型注释

    支持:

    • 变量的类型注解
    • 函数(方法)形参列表和返回值的类型注解

    6.2 类型注解的语法

    6.2.1 为变量设置类型注解

    基础语法: 变量: 类型

    • 基础数据类型注解
      在这里插入图片描述

    • 类对象类型注解
      在这里插入图片描述

    • 基础容器类型注解
      在这里插入图片描述

    • 容器类型详细注解

      在这里插入图片描述

    注意:

    • 元组类型设置类型详细注解,需要将每一个元素都标记出来
    • 字典类型设置类型详细注解,需要2个类型,第一个是key第二个是value

    除了使用 变量: 类型, 这种语法做注解外,也可以在注释中进行类型注解。
    语法:

    # type: 类型
    
    • 1
    • 在注释中进行类型注解
      在这里插入图片描述
    6.2.2 类型注解的限制

    类型注解主要功能在于:

    • 帮助第三方IDE工具(如PyCharm)对代码进行类型推断,协助做代码提示
    • 帮助开发者自身对变量进行类型注释(备注)

    并不会真正的对类型做验证和判断。也就是,类型注解仅仅是提示性的,不是决定性的。

    6.3 函数(方法)的类型注解 - 形参注解

    函数和方法的形参类型注解语法:
    在这里插入图片描述

    6.4 函数(方法)的类型注解 - 返回值注解

    同时,函数(方法)的返回值也是可以添加类型注解的。
    语法如下:
    在这里插入图片描述
    案例:
    在这里插入图片描述
    在这里插入图片描述

    6.5 Union类型

    使用Union[类型, ......, 类型]可以定义联合类型注解。
    Union联合类型注解,在变量注解、函数(方法)形参和返回值注解中,均可使用。

    导包:from typing import Union
    在这里插入图片描述

    7 多态

    多态,指的是:多种状态,即完成某个行为时,使用不同的对象会得到不同的状态。多态常作用在继承关系上。
    即:

    • 以父类做定义声明
    • 以子类做实际工作
    • 用以获得同一行为, 不同状态

    8 抽象类(接口)

    在这里插入图片描述

    这种设计的含义是:

    • 父类用来确定有哪些方法
    • 具体的方法实现,由子类自行决定
  • 相关阅读:
    神经网络训练结果不稳定,神经网络越训练越慢
    开发工程师必备————【Day12】MySQL数据库基础操作
    JS-数组去重
    动态规划学习3:116 · 跳跃游戏
    标准lua和luajit的一个代码测试对比
    Prometheus 监控指南:如何可靠地记录数字时间序列数据
    require、loadfile、dofile、load、loadstring
    西电算法第一次上机习题讲解
    如何使用Jekyll在GitHub Pages上搭建网站(个人博客)
    【贪心算法题记录】1005. K 次取反后最大化的数组和
  • 原文地址:https://blog.csdn.net/wu2374633583/article/details/127320788