面向对象编程(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.rhkb.cn/news/93774.html

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

相关文章

初识Sentinel

目录 1.解决雪崩的方式有4种: 1.1.2超时处理: 1.1.3仓壁模式 1.1.4.断路器 1.1.5.限流 1.1.6.总结 1.2.服务保护技术对比 1.3.Sentinel介绍和安装 1.3.1.初识Sentinel 1.3.2.安装Sentinel 1.4.微服务整合Sentinel 2.流量控制 2.1.簇点链路 …

K8S调度

K8S调度 一、List-Watch 机制 controller-manager、scheduler、kubelet 通过 List-Watch 机制监听 apiserver 发出的事件,apiserver 通过 List-Watch 机制监听 etcd 发出的事件1.scheduler 的调度策略 预选策略/预算策略:通过调度算法过滤掉不满足条件…

什么是EM(最大期望值算法)

什么是EM(最大期望值算法) 在现实生活中,苹果百分百是苹果,梨百分白是梨。 生活中还有很多事物是概率分布,比如有多少人结了婚,又有多少人有工作, 如果我们想要调查人群中吸大麻者的比例呢?敏感问题很难得…

PHP8的字符串操作1-PHP8知识详解

字符串是php中最重要的数据之一,字符串的操作在PHP编程占有重要的地位。在使用PHP语言开发web项目的过程中,为了实现某些功能,经常需要对某些字符串进行特殊的处理,比如字符串的格式化、字符串的连接与分割、字符串的比较、查找等…

【Hyper-V】Windows11 家庭版怎么启用虚拟机Hyper-V

在电脑Windows11系统上启用虚拟机Hyper-V,打开 启用和关闭WIndows功能,找到其中一项Hyper-V,对于家庭版的系统用户来说,这个选项是没有的,接下来讲一讲怎么开启。 安装Hyper-V 创建一个文件名为Hyper-v.bat&#xff…

springcloud3 hystrix实现服务降级的案例配置2

一 服务降级的说明 1.1 服务降级说明 "服务器忙,请稍后在试"不让客户达等待,立即返回一个友好的提示。 1.2 服务降级的触发情况 1.程序运行异常; 2.超时; 3.服务熔断触发服务降级;4 .线程池/信号量打…

Web菜鸟教程 - Springboot接入认证授权模块

网络安全的重要性不言而喻,如今早已不是以前随便弄个http请求就能爬到数据的时代,而作为一个架构师,网络安全必须在产品开发之初就考虑好。因为在产品开发的后期,一方面是客户增多,压力变大,可供利用的时间…

[LeetCode]矩阵对角线元素的和

解题 思路 1: 循环,找到主对角线的下标和副对角线的下标,如果矩阵长或宽为奇数的时候,需要减去中间公共的那一个值,中间公共的那个数的下标为mat[mat.size()/2][mat.size()/2]副对角线的下标为 mat [i][mat.size()-i-1] class Solution { public:int diagonalSum(vector<ve…

2.阿里云对象存储OSS

1.对象存储概述 文件上传&#xff0c;是指将本地图片、视频、音频等文件上传到服务器上&#xff0c;可以供其他用户浏览或下载的过程。文件上传在项目中应用非常广泛&#xff0c;我们经常发抖音、发朋友圈都用到了文件上传功能。 实现文件上传服务&#xff0c;需要有存储的支持…

软考笔记——10.项目管理

进度管理 进度管理就是采用科学的方法&#xff0c;确定进度目标&#xff0c;编制进度计划和资源供应计划&#xff0c;进行进度控制&#xff0c;在与质量、成本目标协调的基础上&#xff0c;实现工期目标。 具体来说&#xff0c;包括以下过程&#xff1a; (1) 活动定义&#…

(stm32)低功耗模式

低功耗模式 执行哪个低功耗模式的程序判断流程 标志位设置操作一定要在WFI/WFE之前&#xff0c;调用此指令后立即进入睡眠判断流程 模式对比 睡眠模式 停止模式 待机模式

Effective C++学习笔记(8)

目录 条款49&#xff1a;了解new-handler的行为条款50&#xff1a;了解new和delete的合理替换时机条款51&#xff1a;编写new和delete时需固守常规条款52&#xff1a;写了placement new也要写placement delete条款53&#xff1a;不要轻忽编译器的警告条款54&#xff1a;让自己熟…

智能楼宇综合布线实训室建设方案

一、楼宇智能综合布线实训室方案概述 楼宇智能综合布线实训室方案旨在为学生提供一个真实的学习和实践环境&#xff0c;以培养他们在楼宇智能综合布线领域的实际操作能力和技能。以下是一个概述&#xff1a; 1. 培养目标&#xff1a;培养学生在楼宇智能综合布线方面的综合能力…

LeetCode150道面试经典题-- 环形链表(简单)

1.题目 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&…

React2023电商项目实战 - 1.项目搭建

古人学问无遗力&#xff0c;少壮工夫老始成。 纸上得来终觉浅&#xff0c;绝知此事要躬行。 —— 陆游《《冬夜读书示子聿》》 系列文章目录 项目搭建App登录及网关App文章自媒体平台&#xff08;博主后台&#xff09;内容审核(自动) 文章目录 系列文章目录一、项目介绍1.页面…

Smartbi 李代:人尽其才、数尽其用,Smartbi Eagle智慧数据运营平台全新亮相

数据是企业数字化转型的基石&#xff0c;也是赢得未来的核心资产和竞争力。数字化转型的关键&#xff0c;是在全公司建立一种数据驱动的组织和机制&#xff0c;营造数据文化的氛围&#xff0c;让更多的用户、在更多的场景中&#xff0c;有意愿、有能力使用数据&#xff0c;从而…

ssm+vue基于java的健身房管理系统源码和论文PPT

ssmvue基于java的健身房管理系统源码和论文PPT015 开发工具&#xff1a;idea 数据库mysql5.7(mysql5.7最佳) 数据库链接工具&#xff1a;navcat,小海豚等 开发技术&#xff1a;java ssm tomcat8.5 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统…

手机出现 不读卡 / 无信号时应该怎么办?

当手机屏幕亮起&#xff0c;一般在屏幕最上方都会有代表手机卡状态的显示&#xff0c;其中网络信号和读卡状态的标识&#xff0c;依旧有很多人分不太清&#xff0c;更不清楚改怎么办了。 1、当我们的手机里有两张卡时&#xff0c;则会有两个信号显示 2、信号状态一般是由短到…

什么是合成数据(Synthetic Data)?

关于合成数据您需要知道的一切 推出人工智能&#xff08;AI&#xff09;的企业在为其模型采集足够的数据方面会遇到一个主要障碍。对于许多用例来说&#xff0c;正确的数据根本不可用&#xff0c;或者获取数据非常困难且成本高昂。在创建AI模型时&#xff0c;数据缺失或不完整…

人尽其才、数尽其用,Smartbi Eagle智慧数据运营平台全新亮相

数据是企业数字化转型的基石&#xff0c;也是赢得未来的核心资产和竞争力。数字化转型的关键&#xff0c;是在全公司建立一种数据驱动的组织和机制&#xff0c;营造数据文化的氛围&#xff0c;让更多的用户、在更多的场景中&#xff0c;有意愿、有能力使用数据&#xff0c;从而…