文章目录

    • 一、思维导图
    • 二、详细内容
      • 第 6 章:面向对象编程基础
        • 6.1 面向对象编程的概念和优势
        • 6.2 类和对象的定义与创建
        • 6.3 类的属性和方法
        • 6.4 构造函数(__init__)和析构函数(__del__)
        • 6.5 封装、继承和多态的实现
      • 第 7 章:高级面向对象编程
        • 7.1 类的特殊方法(如 __str__、__len__ 等)
        • 7.2 类的静态方法和类方法
        • 7.3 抽象基类和抽象方法
        • 7.4 多重继承和方法解析顺序(MRO)
    • 三、总结

一、思维导图

在这里插入图片描述

二、详细内容

第 6 章:面向对象编程基础

6.1 面向对象编程的概念和优势

面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,它将数据和操作数据的方法封装在一起,形成对象。对象之间通过消息传递进行交互。

优势:

  • 可维护性:代码结构清晰,易于理解和修改。
  • 可扩展性:可以通过继承和多态方便地扩展功能。
  • 可重用性:可以复用已有的类和对象。
6.2 类和对象的定义与创建

在 Python 中,使用 class 关键字定义类,类是对象的蓝图,对象是类的实例。

# 定义一个简单的类
class Person:pass# 创建对象
p1 = Person()
p2 = Person()
6.3 类的属性和方法

类的属性是类的特征,方法是类的行为。

class Person:# 类属性species = "Homo sapiens"def __init__(self, name, age):# 实例属性self.name = nameself.age = age# 实例方法def introduce(self):print(f"Hi, my name is {self.name} and I'm {self.age} years old.")p = Person("Alice", 25)
print(p.species)  # 访问类属性
p.introduce()  # 调用实例方法
6.4 构造函数(init)和析构函数(del
  • 构造函数__init__ 方法在创建对象时自动调用,用于初始化对象的属性。
  • 析构函数__del__ 方法在对象被销毁时自动调用。
class Person:def __init__(self, name):self.name = nameprint(f"{self.name} is created.")def __del__(self):print(f"{self.name} is destroyed.")p = Person("Bob")
del p
6.5 封装、继承和多态的实现
  • 封装:将数据和操作数据的方法封装在一起,隐藏对象的内部实现细节。
  • 继承:子类可以继承父类的属性和方法,从而实现代码的复用。
  • 多态:不同的对象可以对同一消息做出不同的响应。
# 封装
class BankAccount:def __init__(self, balance):self.__balance = balance  # 私有属性def deposit(self, amount):self.__balance += amountdef get_balance(self):return self.__balance# 继承
class SavingsAccount(BankAccount):def __init__(self, balance, interest_rate):super().__init__(balance)self.interest_rate = interest_ratedef calculate_interest(self):return self.get_balance() * self.interest_rate# 多态
class Animal:def speak(self):passclass Dog(Animal):def speak(self):print("Woof!")class Cat(Animal):def speak(self):print("Meow!")def make_animal_speak(animal):animal.speak()dog = Dog()
cat = Cat()
make_animal_speak(dog)
make_animal_speak(cat)

第 7 章:高级面向对象编程

7.1 类的特殊方法(如 strlen 等)

特殊方法以双下划线开头和结尾,用于实现对象的特殊行为。

class Book:def __init__(self, title, author, pages):self.title = titleself.author = authorself.pages = pagesdef __str__(self):return f"{self.title} by {self.author}"def __len__(self):return self.pagesbook = Book("Python Crash Course", "Eric Matthes", 500)
print(book)  # 调用 __str__ 方法
print(len(book))  # 调用 __len__ 方法
7.2 类的静态方法和类方法
  • 静态方法:使用 @staticmethod 装饰器定义,不需要实例化对象就可以调用,与类和实例无关。
  • 类方法:使用 @classmethod 装饰器定义,第一个参数是类本身,通常用于创建类的实例。
class MathUtils:@staticmethoddef add(a, b):return a + b@classmethoddef create_from_list(cls, numbers):return sum(numbers)print(MathUtils.add(2, 3))  # 调用静态方法
print(MathUtils.create_from_list([1, 2, 3]))  # 调用类方法
7.3 抽象基类和抽象方法

抽象基类是包含抽象方法的类,抽象方法是没有实现的方法,子类必须实现这些抽象方法。

from abc import ABC, abstractmethodclass Shape(ABC):@abstractmethoddef area(self):passclass Circle(Shape):def __init__(self, radius):self.radius = radiusdef area(self):return 3.14 * self.radius ** 2circle = Circle(5)
print(circle.area())
7.4 多重继承和方法解析顺序(MRO)

多重继承是指一个子类可以继承多个父类的属性和方法。方法解析顺序(MRO)决定了在多重继承中调用方法的顺序。

class A:def method(self):print("A's method")class B:def method(self):print("B's method")class C(A, B):passc = C()
c.method()  # 调用 A 的方法,因为 A 在 MRO 中排在前面
print(C.mro())  # 查看 MRO

三、总结

面向对象编程是一种强大的编程范式,它通过封装、继承和多态等特性,提高了代码的可维护性、可扩展性和可重用性。在基础部分,我们学习了类和对象的定义、属性和方法的使用,以及构造函数和析构函数的作用。在高级部分,我们深入探讨了类的特殊方法、静态方法和类方法,以及抽象基类和多重继承等概念。掌握这些知识,将有助于我们编写更加高效、灵活和可维护的代码。

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

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

相关文章

虚拟商品自动化实践:闲鱼订单防漏发与模板化管理的技术解析

最近阿灿发现了一款闲鱼虚拟商品卖家必备神器!告别手动发货,订单自动处理,防错防漏,支持课程、激活码、电子书等多种商品,预设模板更省心。文末获取工具!最厉害的是,你完全不用一直开着电脑。以…

【Zephyr开发实践系列】08_NVS文件系统调试记录

文章目录前言一、NVS原理介绍:二、BUG-NO1:将NVS运用在NAND-Flash类大容量存储设备2.1 情况描述:2.2 BUG复现:文件系统设备树构建测试应用编写(导致错误部分):问题呈现:2.3 问题简述…

网络安全第二次作业

靶场闯关1~8 1. 在url后的name后输入payload ?name<script>alert(1)</script> 2. 尝试在框中输入上一关的payload,发现并没有通过&#xff0c;此时我们可以点开页面的源代码看看我们输入的值被送到什么地方去了 从图中可以看到&#xff0c;我们输入的值被送到i…

LangChain 源码剖析(七)RunnableBindingBase 深度剖析:给 Runnable“穿衣服“ 的装饰器架构

每一篇文章都短小精悍&#xff0c;不啰嗦。一、功能定位&#xff1a;Runnable 的 "增强包装器"RunnableBindingBase 是 LangChain 中实现装饰器模式的核心组件。它就像给原有 Runnable 套上一件 "功能外套"—— 不改变原有 Runnable 的核心逻辑&#xff0c…

为 Git branch 命令添加描述功能

写在最前面的使用方式 查看 所有分支的备注 git branch.notes创建分支并为分支添加备注 git co -b feat/oauth -m 第三方用户登录对分支描述的添加与清除 添加 git branch.note --add 清除 git branch.note --clear &#x1f4dd; 为 Git branch 命令添加描述功能 &#x…

LeetCode|Day18|20. 有效的括号|Python刷题笔记

LeetCode&#xff5c;Day18&#xff5c;20. 有效的括号&#xff5c;Python刷题笔记 &#x1f5d3;️ 本文属于【LeetCode 简单题百日计划】系列 &#x1f449; 点击查看系列总目录 >> &#x1f4cc; 题目简介 题号&#xff1a;20. 有效的括号 难度&#xff1a;简单 题目…

使⽤Pytorch构建⼀个神经⽹络

关于torch.nn:使⽤Pytorch来构建神经⽹络, 主要的⼯具都在torch.nn包中.nn依赖于autograd来定义模型, 并对其⾃动求导.构建神经⽹络的典型流程:定义⼀个拥有可学习参数的神经⽹络遍历训练数据集处理输⼊数据使其流经神经⽹络计算损失值将⽹络参数的梯度进⾏反向传播以⼀定的规则…

网络爬虫的详细知识点

基本介绍 什么是网络爬虫 网络爬虫&#xff08;Web Crawler&#xff09;是一种自动化程序&#xff0c;用于从互联网上抓取、解析和存储网页数据。其核心功能是模拟人类浏览行为&#xff0c;通过HTTP/HTTPS协议访问目标网站&#xff0c;提取文本、链接、图片或其他结构化信息&…

AndroidX中ComponentActivity与原生 Activity 的区别

一、AndroidX 与原生 Activity 的区别 1. 概念与背景 原生 Activity&#xff1a;指 Android 早期&#xff08;API 1 起&#xff09;就存在于 android.app 包下的 Activity 类&#xff08;如 android.app.Activity&#xff09;&#xff0c;是 Android 最初的 Activity 实现&…

Spring AI 使用 Elasticsearch 作为向量数据库

前言 嗨&#xff0c;大家好&#xff0c;我是雪荷&#xff0c;最近在公司开发 AI 知识库&#xff0c;同时学到了一些 AI 开发相关的技术&#xff0c;这期先与大家分享一下如何用 ES 当做向量数据库。 安装ES 第一步我们先安装 Elasticsearch&#xff0c;这里建议 Elasticsear…

TypeScript 配置全解析:tsconfig.json、tsconfig.app.json 与 tsconfig.node.json 的深度指南

前言在现代前端和后端开发中&#xff0c;TypeScript 已经成为许多开发者的首选语言。然而&#xff0c;TypeScript 的配置文件&#xff08;特别是多个配置文件协同工作时&#xff09;常常让开发者感到困惑。本文将深入探讨 tsconfig.json、tsconfig.app.json 和 tsconfig.node.j…

读书笔记(学会说话)

1、一个人只有会说话&#xff0c;才会有好人缘&#xff0c;做事才会顺利。会说话的人容易成功。善于说话的人易成功&#xff0c;而不善说话的人往往寸步难行。我们要把话说得好听&#xff0c;同时更要把事做得漂亮。或许一句话&#xff0c;一件事&#xff0c;就可能使人生的旅途…

私有服务器AI智能体搭建-大模型选择优缺点、扩展性、可开发

以下是主流 AI 框架与模型的对比分析&#xff0c;涵盖其优缺点、扩展性、可开发性等方面。 文章目录一、AI 框架对比二、主流大模型对比三、扩展性对比总结四、可开发性对比总结五、选择建议&#xff08;按场景&#xff09;六、未来趋势一、AI 框架对比 框架优点缺点扩展性可开…

OpenCV直线段检测算法类cv::line_descriptor::LSDDetector

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 该类用于实现 LSD (Line Segment Detector) 直线段检测算法。LSD 是一种快速、准确的直线检测方法&#xff0c;能够在不依赖边缘检测的前提下直接从…

Go语言流程控制(if / for)

分支结构package mainimport ("fmt""strconv" )/* 1.顺序结构 2.分支结构 3.循环结构 *//* if 条件1 {// 条件1为真时执行的代码 } else if 条件2 {// 条件1为假但条件2为真时执行的代码 } else {// 所有条件均为假时执行的代码 }一种特殊的条件分支结构if…

wx小程序设置沉浸式导航文字高度问题

第一步&#xff1a;在app.json中设置"navigationStyle": "custom"第二步骤&#xff1a;文件的home.js中// pages/test/test.js Page({/*** 页面的初始数据*/data: {statusBarHeight: 0,navBarHeight: 44 // 自定义导航内容区高度(单位px)},/*** 生命周期函…

C++算法竞赛篇:DevC++ 如何进行debug调试

C算法竞赛篇&#xff1a;DevC 如何进行debug调试前言一、准备工作&#xff1a;编译生成可执行程序二、核心步骤&#xff1a;设置断点与启动调试1. 设置断点2. 启动调试模式三、调试操作&#xff1a;逐步执行与变量监控1. 逐步执行代码2. 监控变量值变化四、调试结束前言 在算法…

语音大模型速览(三)- cosyvoice2

CosyVoice 2: Scalable Streaming Speech Synthesis with Large Language Models 论文链接&#xff1a;https://arxiv.org/pdf/2412.10117代码链接&#xff1a;https://github.com/FunAudioLLM/CosyVoice 一句话总结 CosyVoice 2 是一款改进的流式语音合成模型&#xff0c;其…

-lstdc++与-static-libstdc++的用法和差异

CMakeLists.txt 里写了&#xff1a; target_link_libraries(${PROJECT_NAME} PRIVATEgccstdc ) target_link_options(${PROJECT_NAME} PRIVATE -static-libstdc)看起来像是“链接了两次 C 标准库”&#xff0c;其实它们的作用完全不同&#xff1a;1. target_link_libraries(...…

Redis学习其二(事务,SpringBoot整合,持久化RDB和AOF)

文章目录5,事务5.1Redis 事务不保证原子性的原因5.2事务操作过程5.3监控6,SpringBoot整合Redis6.1Redis客户端6.1.1Jedis简单使用6.1.2Lettuce&Jedis6.2配置相关6.3使用6.3.1使用RedisTemplate6.3.2Redis工具类7,持久化RDB7.1RDB持久化原理7.2触发机制save命令flushall命令…