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

文章目录

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

🍀引言

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


🍀 类与对象

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

🍀封装

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

class Student:def __init__(self, name, age):self.name = nameself.__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 = subjectdef display(self):super().display()  # 调用父类方法print(f"科目: {self.subject}")teacher = Teacher("Bob", 32, "数学")
teacher.display()

运行结果如下

在这里插入图片描述

🍀多态

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

class Animal:def speak(self):passclass 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 = brandself.model = modeldef 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 ** 2circle1 = Circle(5)
circle2 = Circle(7)print(circle1.area())  # 输出:78.5
print(circle2.area())  # 输出:153.86

🍀魔术方法

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

class Book:def __init__(self, title, author):self.title = titleself.author = authordef __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:@staticmethoddef add(x, y):return x + y@classmethoddef square(cls, x):return x ** 2print(MathUtils.add(3, 5))  # 输出:8
print(MathUtils.square(4))  # 输出:16

🍀面向对象编程的扩展

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

🍀面向对象编程的思维

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

🍀总结

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

请添加图片描述

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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue实现动态可视化

1、可视化效果&#xff1a; 水晶球环绕地球旋转&#xff1b; 2、实现 <template><div class"container"><div class"header-body"><div class"header-left"></div><div class"header-title">网…

POSTGRESQL 关于2023-08-14 数据库自动启动文章中使用KILL 来进行配置RELOAD的问题解释...

开头还是介绍一下群&#xff0c;如果感兴趣Polardb ,mongodb ,MySQL ,Postgresql ,redis &#xff0c;SQL SERVER ,ORACLE,Oceanbase 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请加 liuaustin3微信号 &…

请解释一下CSS中的rem和em单位有什么不同,分别如何使用?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ CSS中的rem和em单位的区别和使用⭐ em单位使用示例&#xff1a; ⭐ rem 单位使用示例&#xff1a; ⭐ 区别和适用场景⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何…

数据结构-栈的实现(C语言版)

前言 栈是一种特殊的线性表&#xff0c;只允许在固定的一端进行插入和删除的操作&#xff0c;进行数据插入和删除的一端叫做栈顶&#xff0c;另一端叫做栈底。 栈中的数据元素遵循后进先出的的原则。 目录 1.压栈和出栈 2. 栈的实现 3.测试代码 1.压栈和出栈 压栈&#xff…

电商增强现实3D模型优化需要关注的4个方面

到目前为止&#xff0c;AR技术已经发展到足以在更广泛的范围内实施。 在电子商务中&#xff0c;这项技术有望提供更令人兴奋的购物体验。 为了实现这一目标&#xff0c;在这篇博客中&#xff0c;我将介绍如何针对电子商务中的 AR 优化 3D 模型。 推荐&#xff1a;用 NSDT编辑器…

Git:在本地电脑上如何使用git?

git 版本&#xff1a; 2.40.1.windows.1 文章目录 一. 使用git之前你必须要理解的几个概念1.1 理解工作区、版本库、暂存区的概念1.2 提交Git版本库的步骤【分两步执行】 二. Git本地库实战2.1 初始化版本库2.2 新建 & 提交 & 状态2.3 查看日志2.4 回退 & 穿梭 &am…

Django的简介安装与配置及两大设计模式

一.Djang的介绍 1.Django是什么 Django 是使用 Python 语言开发的一款免费而且开源的 Web 应用框架。 由于 Python 语言的跨平台性&#xff0c;所以 Django 同样支持 Windows、Linux 和 Mac 系统。 在 Python 语言炽手可热的当下&#xff0c;Django 也迅速的崛起&#xff0c;在…

【c语言】 -- 指针进阶

&#x1f4d5;博主介绍&#xff1a;目前大一正在学习c语言&#xff0c;数据结构&#xff0c;计算机网络。 c语言学习&#xff0c;是为了更好的学习其他的编程语言&#xff0c;C语言是母体语言&#xff0c;是人机交互接近底层的桥梁。 本章来学习指针进阶。 让我们开启c语言学习…

Vue 安装开发者工具

1.下载开发者工具&#xff0c;下载地址&#xff1a;http://book.wiyp.top/App/Vue3开发者工具-谷歌/Vue3.crx 2.打开谷歌浏览器&#xff0c;点击扩展&#xff0c;点击管理扩展程序。 3.开启开发者模式&#xff0c;将 Vue3 开发者工具文件拖拽到浏览器中进行安装。 注&#xff…

Postman如何做接口测试:什么?postman 还可以做压力测试?

我们都知道&#xff0c; postman 是一款很好用的接口测试工具。不过 postman 还可以做简单的压力测试&#xff0c;而且步骤只需要 2 步。 首先&#xff0c;打开 postman, 编写接口的请求参数。 然后&#xff0c;点击右下方的 runner 运行器&#xff0c;把需要测试的接口拖动到…

分布式 - 消息队列Kafka:Kafka生产者架构和配置参数

文章目录 1. kafka 生产者发送消息整体架构2. Kafka 生产者重要参数配置01. acks02. 消息传递时间03. linger.ms04. buffer.memory05. batch.size06. max.in.flight.requests.per.connection07. compression.type08. max.request.size09. receive.buffer.bytes和 send.buffer.b…

WAVE SUMMIT2023六大分会场同步开启,飞桨+文心大模型加速区域产业智能化!

由深度学习技术及应用国家工程研究中心主办、百度飞桨和文心大模型承办的WAVE SUMMIT深度学习开发者大会2023将于8月16日重磅来袭&#xff01;届时上海、广州、深圳、成都、南昌和宁波六大分会场将同步开启&#xff01; 分会汇聚区域产业大咖、科研机构专家、知名学者和技术大…