面向对象编程(OOP):Python中的抽象与封装

news2024/11/16 19:31:48

文章目录

  • 🍀引言
  • 🍀 类与对象
  • 🍀封装
  • 🍀继承
  • 🍀多态
  • 🍀面向对象编程的优势
  • 🍀使用面向对象编程的场景
  • 🍀实例化与构造函数
  • 🍀 成员属性和类属性
  • 🍀魔术方法
  • 🍀静态方法和类方法
  • 🍀面向对象编程的扩展
  • 🍀面向对象编程的思维
  • 🍀总结

🍀引言

面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它以对象为基本单位,将数据和操作封装在一起,使代码更具结构性和可维护性。Python作为一门面向对象的编程语言,深受OOP思想的影响。本文将探讨Python中面向对象编程的核心概念,如类、对象、封装、继承和多态。


🍀 类与对象

  • 类是一种定义数据和操作的模板,它包括属性(数据成员)和方法(函数成员)。
  • 对象是类的实例,代表一个具体的数据实体,通过类来创建。

🍀封装

封装是将数据和方法封装在一起,隐藏了内部细节,只暴露必要的接口。通过访问控制来保护数据,避免直接访问内部数据。

class Student:
    def __init__(self, name, age):
        self.name = name
        self.__age = age  # 私有属性

    def display(self):
        print(f"姓名: {self.name}, 年龄: {self.__age}")

student = Student("Alice", 25)
student.display()  # 访问公有方法
print(student.__age)  # 错误:不能直接访问私有属性

运行结果如下
在这里插入图片描述


🍀继承

继承允许一个类继承另一个类的属性和方法,以实现代码的重用和扩展。

class Teacher(Student):
    def __init__(self, name, age, subject):
        super().__init__(name, age)
        self.subject = subject

    def display(self):
        super().display()  # 调用父类方法
        print(f"科目: {self.subject}")

teacher = Teacher("Bob", 32, "数学")
teacher.display()

运行结果如下

在这里插入图片描述

🍀多态

多态允许不同的类具有相同的方法名,但可以根据上下文表现出不同的行为。它增强了代码的灵活性和可扩展性。

class Animal:
    def speak(self):
        pass

class Dog(Animal):
    def speak(self):
        print("汪汪汪!")

class Cat(Animal):
    def speak(self):
        print("喵喵喵!")

def animal_speak(animal):
    animal.speak()

dog = Dog()
cat = Cat()

animal_speak(dog)  # 输出:汪汪汪!
animal_speak(cat)  # 输出:喵喵喵!

运行结果如下
在这里插入图片描述

🍀面向对象编程的优势

模块化和可维护性: 将功能模块化为类和对象,使代码更易于维护和扩展。
代码重用: 通过继承和多态,实现代码的重用,减少冗余代码。
数据封装和保护: 封装数据和方法,保护内部实现细节。
抽象和清晰性: 高层抽象更符合现实世界问题的描述,使代码更易读懂。

🍀使用面向对象编程的场景

复杂应用: 对象的抽象和模块化适用于复杂应用。
框架和库: 许多框架和库都采用了OOP思想。
可维护性需求: 面向对象的代码更易于维护。

🍀实例化与构造函数

实例化是创建类的对象的过程。对象是类的具体实例,拥有类中定义的属性和方法。
构造函数是一种特殊的方法,在对象创建时自动调用。在Python中,构造函数使用__init__方法来定义。

class Car:
    def __init__(self, brand, model):
        self.brand = brand
        self.model = model

    def display(self):
        print(f"品牌: {self.brand}, 型号: {self.model}")

my_car = Car("Toyota", "Corolla")
my_car.display()

🍀 成员属性和类属性

成员属性是属于对象的属性,每个对象都有自己的副本。
类属性是属于类的属性,所有对象共享相同的值。

class Circle:
    pi = 3.14  # 类属性

    def __init__(self, radius):
        self.radius = radius  # 成员属性

    def area(self):
        return self.pi * self.radius ** 2

circle1 = Circle(5)
circle2 = Circle(7)

print(circle1.area())  # 输出:78.5
print(circle2.area())  # 输出:153.86

🍀魔术方法

魔术方法是以双下划线开头和结尾的特殊方法,用于执行特定的操作,如初始化、字符串表示等。

class Book:
    def __init__(self, title, author):
        self.title = title
        self.author = author

    def __str__(self):
        return f"《{self.title}》 by {self.author}"

book = Book("Python Programming", "John Doe")
print(book)  # 输出:《Python Programming》 by John Doe

🍀静态方法和类方法

静态方法是属于类而不是对象的方法,通过@staticmethod装饰器定义。
类方法是对类进行操作的方法,通过@classmethod装饰器定义。

class MathUtils:
    @staticmethod
    def add(x, y):
        return x + y

    @classmethod
    def square(cls, x):
        return x ** 2

print(MathUtils.add(3, 5))  # 输出:8
print(MathUtils.square(4))  # 输出:16

🍀面向对象编程的扩展

抽象类与接口: Python中没有严格的抽象类和接口定义,但可以使用abc模块来实现类似的功能。
多重继承: Python支持多重继承,一个类可以继承多个父类的属性和方法。
属性访问器和修改器: 可以使用property装饰器来创建属性访问器和修改器,控制属性的读取和写入。

🍀面向对象编程的思维

分析问题: 将问题分解为对象和关系,设计合适的类和方法。
抽象和模块化: 将对象抽象为类,将功能模块化为方法。
复用和扩展: 使用继承和多态来复用和扩展代码。
封装和保护: 封装数据和方法,保护内部实现。

🍀总结

面向对象编程是一种强大的编程范式,它提供了更好的组织、管理和维护代码的方式。Python作为一门支持面向对象编程的语言,为开发者提供了丰富的工具来创建类、封装数据、实现继承和多态。通过合理应用面向对象编程,你可以写出更加模块化、清晰和可维护的代码。

请添加图片描述

挑战与创造都是很痛苦的,但是很充实。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/890409.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

opencv基础:几个常用窗口方法

开始说了一些opencv中的一些常用方法。 namedWindow方法 在OpenCV中,namedWindow函数用于创建一个窗口,并给它指定一个名字。这个函数的基本语法如下: import cv2cv2.namedWindow(窗口名称, 标识 )窗口名称:其实窗口名称&…

SqlServer Management工具格式化代码、美化SQL

1、下载simple but powerful SQL formatter 插件下载地址:地址 2、安装 点击next—> finish 3、重新打开SqlServer Management即可看到 SQL Beautifier 点击Format ALL SQL 或者选中sql点击Format Selected SQL即可

Linux的基本权限(文件,目录)

文章目录 前言一、Linux权限的概念二、Linux权限管理 1.文件访问者分类2.文件类型和访问类型3.文件访问权限的相关设置方法三、目录的权限四、权限的总结 前言 Linux下一切皆文件,指令的本质就是可执行文件,直接安装到了系统的某种路径下 一、Linux权限的…

交换实验一

题目 交换机上接口配置 SW1 interface GigabitEthernet0/0/1 port hybrid tagged vlan 2 port hybrid untagged vlan 3 to 6 interface Ethernet0/0/2 port hybrid pvid vlan 3 port hybrid untagged vlan 2 to 6 interface Ethernet0/0/3 port link-type access port d…

【NAS群晖drive异地访问】使用cpolar远程访问内网Synology Drive「内网穿透」

文章目录 前言1.群晖Synology Drive套件的安装1.1 安装Synology Drive套件1.2 设置Synology Drive套件1.3 局域网内电脑测试和使用 2.使用cpolar远程访问内网Synology Drive2.1 Cpolar云端设置2.2 Cpolar本地设置2.3 测试和使用 3. 结语 前言 群晖作为专业的数据存储中心&…

第 3 章 稀疏数组和队列(2)

3.2 队列 3.2.1队列的一个使用场景 银行排队的案例: 3.2.2队列介绍 队列是一个有序列表,可以用数组或是链表来实现。遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出示意图:(使用数组模拟队列示意图) 3.2.3数组模拟队列思路…

[RDMA] 高性能异步的消息传递和RPC :Accelio

1. Introduce Accelio是一个高性能异步的可靠消息传递和RPC库,能优化硬件加速。 RDMA和TCP / IP传输被实现,并且其他的传输也能被实现,如共享存储器可以利用这个高效和方便的API的优点。Accelio 是 Mellanox 公司的RDMA中间件,用…

苹果支付的实现

由于app经常需要用到支付功能,然而ios用户,是无法用支付宝、微信进行支付,这时候只能用到苹果支付。苹果支付是苹果公司推出的一种在线支付方式,用户可以通过苹果支付购买应用、内购道具等等。 原理 苹果支付的实现原理是通过在…

VHDL记录

文章目录 使用function名称作为“常量”numeric_std包集中使用乘法的注意项variable的使用对于entity设置属性的方法在entity声明中嵌入function的定义VHDL仿真读写文件File declaration/File handingFile readingFile writing小例子 使用函数 模块中打印出调试信息 使用functi…

(搜索) 剑指 Offer 12. 矩阵中的路径 ——【Leetcode每日一题】

❓剑指 Offer 12. 矩阵中的路径 难度:中等 给定一个 m * n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻的单元格内的字母构…

.netcore grpc客户端工厂及依赖注入使用

一、客户端工厂概述 gRPC 与 HttpClientFactory 的集成提供了一种创建 gRPC 客户端的集中方式。可以通过依赖包Grpc.Net.ClientFactory中的AddGrpcClient进行gRPC客户端依赖注入AddGrpcClient函数提供了许多配置项用于处理一些其他事项;例如AOP、重试策略等 二、案…

CS5523规格书|MIPI转EDP方案设计|替代LT8911芯片电路原理|ASL集睿致远CS替代龙讯

ASL芯片(集睿致远) CS5523是一款MIPI DSI输入,DP/e DP输出转换芯片,可pin to pin替代LT8911龙讯芯片。 MIPI DSI 最多支持 4 个通道,每个通道的最大运行速度为 1.5Gps。对于DP 1.2输出,它支持1.62Gbps和2.…

一文揭露AI聊天机器人到底是怎么实现自助应答的

现在很多的企业都会使用客服系统,主要是想通过它们来解决企业的一些问题和需求。所有就衍生了——AI聊天机器人这个新工具,它是把AI人工智能运用到客户服务当中,让AI来帮助我们完成一些解答客户问题的操作。下面我们就来说一下AI聊天机器人是…

创建和使用分区

创建和使用分区 创建一个名为 /home/curtis/ansible/partition.yml 的 playbook: 该palybook包含一个paly,该paly在balancers主机组的主机上运行: 在设备vdb上创建单个主分区,编号为1,大小为1500MiB 使用ext4文件系统…

数据建模和设计for CDGP第五章——如何绘制鸭掌图

CDGP中第五章必考一个数据模型设计题,分值10分。 主要考点 1、围绕一个场景如(外卖送餐、图书馆管理系统等)进行关系型逻辑数据模型设计2、要求满足范式化(通常为3NF)3、突出重点的实体并描述实体间的关系 加gzh“大数…

Linux下gdb调试

1.基本命令操作 2.调试方式启动运行无参程序 以下是linux下GDB调试的一个实例&#xff0c;先给出一个示例用的小程序&#xff0c;C语言代码&#xff1a; main.c #include <stdio.h>void Print(int i){printf("hello,程序猿编码 %d\n", i); }int main(int argc…

1281. 整数的各位积和之差

诸神缄默不语-个人CSDN博文目录 力扣刷题笔记 文章目录 1. 简单粗暴的遍历2. 其实也是遍历&#xff0c;但是用Python内置函数只用写一行 1. 简单粗暴的遍历 Python版&#xff1a; class Solution:def subtractProductAndSum(self, n: int) -> int:he0ji1while n>1:last…

杭电比赛总结

我们的队伍&#xff1a;team013 另外两队&#xff1a;team014、team015 ​ 今天是我第一次打杭电&#xff0c;发现杭电多数都是猜结论题 先给一下我们的提交数据 Submit TimeProblem IDTimeMemoryJudge Status4:59:59101115 MS1692 KWrong Answer4:59:55101115 MS1684 KWrong…

互联网发展历程:畅通无阻,流控的智慧应对

随着互联网的蓬勃发展&#xff0c;网络使用量不断增加&#xff0c;可能导致网络拥挤问题。在这个数字化时代&#xff0c;人们需要寻找一种方法来优化网络使用&#xff0c;确保数据的流畅传输。而在这一背景下&#xff0c;流量控制&#xff08;流控&#xff09;应运而生。 网络拥…

如何使用SpringBoot 自定义转换器

&#x1f600;前言 本篇博文是关于SpringBoot 自定义转换器的使用&#xff0c;希望你能够喜欢&#x1f60a; &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的…