python基础语法学习: 面向对象的三大特性

文章目录

面向对象编程

面向对象编程, 是许多编程语言都支持的一种编程思想

简单理解就是: 基于模板 (类) 去创建实体 (对象), 使用对象完成功能开发

核心思想:

把一个需求分解成一系列要执行的步骤, 然后按照步骤执行这些任务 (关注的是流程, 步骤)

对象可以理解为现实中具体的人/物在程序中的数字化身 (万物皆对象)

它把一个人/物的属性和方法打包到一起, 是面向对象编程的基本单元

面向对象三大特性:

  • 封装
  • 继承
  • 多态

封装

封装表示将现实世界事物的 属性 和 行为封装到类中, 描述为成员变量, 成员方法, 从而完成程序对现实世界事物的描述

类中提供了私有成员变量 和 私有成员方法

定义私有成员的方法:

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

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

私有方法无法直接被类对象使用, 私有变量无法赋值, 也无法获取值

python 复制代码
class Phone:
    __current_voltage = None

    def __keep_core(self):
        print("单核模式运行")

phone = Phone()
# 以下代码均报错
phone.current_voltage = 10 
phone.__keep_core()
python 复制代码
class Phone:
    __current_voltage = None

    def __keep_core(self):
        print("单核模式运行")

    def get_current_voltage(self):
        self.__current_voltage = 10
        print(self.__current_voltage)
        self.__keep_core()

phone = Phone()

phone.get_current_voltage()

私有成员和私有方法类对象无法直接使用, 但是类内部的其他成员是可以正常使用的

私有成员是在类中提供仅内部使用的属性和方法, 而不对外开放(类对象无法使用)

继承

继承表示: 从父类那里继承 (复制) 来成员变量和成员方法 (不包含私有)

继承分为单继承和多继承

单继承

语法:

python 复制代码
class 类名(父类名): 
    类内容体
python 复制代码
class Phone:
    id = None
    product = "HM"
    def call(self):
        print("4G")

class Phone1(Phone):
    face_id = 2026
    def call_new(self):
        print("5G")

phone = Phone1()
print(phone.product)
phone.call()
phone.call_new()
多继承

语法:

python 复制代码
class 类名(父类1, 父类2, ......, 父类N): 
    类内容体

复写

子类继承父类的成员属性和成员方法后, 如果对其不满意, 可以进行复写

即子类中重新定义同名的属性或方法

python 复制代码
class Father:
    def say(self):
        print("father")

class Son (Father):
    def say(self):
        print("son")

son = Son()
son.say() # son

调用父类同名成员, 那么类对象调用成员的时候, 就会调用复写后的新成员

如果需要使用被复写的父亲的成员, 就需要特殊的调用方式

方式一:

调用父类成员

  • 使用成员变量: 父亲名.成员变量
  • 使用成员方法: 父亲名.成员方法(self)

方式二:

使用 super() 调用父类成员

  • 使用成员变量: super().成员变量
  • 使用成员方法: super().成员方法()
python 复制代码
class Father:
    name = 'Father'
    def say(self):
        print("I am father")

class Son (Father):
    name = 'Son'
    def say(self):
        print("I am son")
        print(self.name)
        print(super().name)

    def test(self):
        Father.say(self)
        super().say()

son = Son()
son.say() # son
son.test()

打印:

python 复制代码
I am son
Son
Father
I am father
I am father

只可以在子类内部调用父类的同名成员, 子类的实体类对象调用默认是调用子类复写的

多态

多态指的是: 多种状态, 即完成某个行为时, 使用不同的对象会得到不同的状态

python 复制代码
class Animal:
    def speak(self):
        pass
class Dog(Animal):
    def speak(self):
        print("I am dog.")
class Cat(Animal):
    def speak(self):
        print("I am cat.")

def make_noise(animal: Animal):
    animal.speak()


dog = Dog()
cat = Cat()
make_noise(dog) # I am dog.
make_noise(cat) # I am dog.

同样的行为(函数), 传入不同的对象, 得到不同的状态

多态常作用在继承关系上

比如:

  • 函数(方法) 形参声明接受父类对象
  • 实际传入父类的子类对象进行工作

即:

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

上面的例子中, 父类的speak方法是空实现

python 复制代码
class Animal:
    def speak(self):
        pass`

这种设计的含义是:

  • 父类用来确定有那些方法
  • 具体的方法实现, 由子类自行决定

这种写法, 就叫做抽象类 (也可以称之为接口)

抽象类: 含有抽象方法的类称之为抽象类

抽象方法: 方法体是空实现的 (pass) 称之为抽象方法

相关推荐
Spider赵毅1 小时前
Python爬虫踩坑实录:BeautifulSoup使用中的高频问题排查
爬虫·python·beautifulsoup
不会代码的小猴2 小时前
7. JSON
开发语言·c++·笔记·qt·算法·json
沫璃染墨2 小时前
《Qt从零入门系列(六):信号与槽进阶——从多种连接方式到Lambda表达式》
开发语言·c++·qt·代码规范·设计规范·qt5
怪奇云呼军2 小时前
知识库也会注入指令?闪电智能VoiceAgent 如何防住 Prompt Injection
人工智能·python·算法·云计算·音视频
ZJU_统一阿萨姆3 小时前
【算子开发】环境搭建与第一个CUDA程序
开发语言·人工智能·系统架构
Evand J3 小时前
【MATLAB例程,车联网8】MPC网联车辆节能跟驰控制:速度跟踪、间距约束与能耗优化。附MATLAB完整代码的下载链接
开发语言·matlab·车联网·调度·mpc·节能·车辆控制
ttwuai3 小时前
Go 后台接入 SSO 后菜单正常但接口 403,怎么排查权限链路?
开发语言·后端·golang
Canmag 兴隆磁性3 小时前
C 系列充磁机
c语言·开发语言·学习·永磁材料·充磁·退磁
zmzb01034 小时前
Python课后习题训练记录Day194
python·opencv·计算机视觉