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) 称之为抽象方法

相关推荐
Titan20249 小时前
网络学习:网络层与数据链路层知识梳理
服务器·网络·学习·tcp/ip
流浪0019 小时前
大厂 C/C++ 2023–2025 面试答案题汇总
开发语言·c++
老猿讲编程9 小时前
【Eclipse OpenSOVD学习之十一】网关二进制与部署
学习·中间件·rust·eclipse·汽车
青少儿编程课堂9 小时前
贪心算法进阶:区间调度与最少资源整合解析
c++·python·算法·贪心·信息学竞赛·区间调度
Yanjun2i9 小时前
Agent学习记录六:Tool 类 + Tool Registry
开发语言·python·学习
一条泥憨鱼9 小时前
【从0开始学习计算机网络】| TIME_WAIT 为什么是 2MSL,CLOSE_WAIT / TIME_WAIT 堆积怎么排查
服务器·开发语言·网络·计算机网络·网络安全
(Charon)9 小时前
【C++】 定时器入门:从定时任务到 epoll 驱动
开发语言·c++
罗西的思考9 小时前
[Agent Memory / 强化学习] MemPO源码学习笔记 —(1)— 总体
人工智能·笔记·深度学习·学习·机器学习
亮_一个嵌入式新手9 小时前
C语言Day21
c语言·开发语言
kcuwu.9 小时前
第 1 课 · Hello, World 与一个 Go 程序的诞生
开发语言·后端·golang