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

相关推荐
学Linux的语莫4 小时前
python中类的常见写法
开发语言·python·状态模式
需要8264 小时前
容器化 Java:镜像瘦身与 JVM 容器感知(cgroup)
java·开发语言·jvm
dyxal4 小时前
A2A 协议 v1.0 完全指南:方法名、Agent Card、三种绑定与 FastAPI 实战
开发语言·qt·fastapi
譕痕4 小时前
Rabbit 实例
java·开发语言·java-rabbitmq
垆边人似月.5 小时前
Python中如何使用get函数实现频次查询
服务器·前端·python
综合简报5 小时前
黑五海外发稿投给谁?三类海外媒体发稿渠道的分工
开发语言·php·媒体
大风起兮云飞扬丶5 小时前
Java——线程池
java·开发语言
AI 编程助手GPT5 小时前
GPT 脚本别只发一个文件:用 uv 把依赖和锁一起交付
人工智能·python·gpt·uv·依赖管理
别动我齐刘海5 小时前
机器人 C++ / 系统联调补强2——异常处理、Protobuf
linux·c++·人工智能·学习·算法·机器学习·机器人
Patrick在香港5 小时前
第 16,216 次连接之后,它不干了
python·网络编程·socket·tcp·连接池