Python面向对象编程:类和对象①

在这里插入图片描述

文章目录

    • 一、什么是面向对象编程
      • 1.1 面向对象编程的基本概念
      • 1.2 Python中的类和对象
    • 二、定义类和创建对象
      • 2.1 定义类
      • 2.2 创建对象
      • 2.3 `__init__`方法
      • 2.4 `self`参数
    • 三、类的属性和方法
      • 3.1 类的属性
        • 3.1.1 实例属性
        • 3.1.2 类属性
      • 3.2 类的方法
        • 3.2.1 实例方法
        • 3.2.2 类方法
        • 3.2.3 静态方法
    • 四、继承
      • 4.1 基本继承
      • 4.2 方法重写
      • 4.3 使用`super()`函数
    • 五、多态
      • 5.1 多态示例
    • 六、综合详细例子
      • 6.1 项目结构
      • 6.2 模块代码
        • book.py
        • member.py
        • library.py
      • 6.3 主程序代码
        • main.py
      • 6.4 运行结果
    • 七、总结

面向对象编程(OOP)是现代编程范式之一,它通过类和对象来组织代码,使代码更加模块化和易于维护。在Python中,面向对象编程是一个重要的概念,掌握类和对象的使用对于编写高效和可维护的代码非常重要。本文将详细介绍Python的类和对象,并附上一个综合详细的例子,篇幅不少于10000字。

一、什么是面向对象编程

面向对象编程是一种编程范式,它使用“对象”来表示数据和方法。对象是类的实例,每个对象都有状态(属性)和行为(方法)。类是对象的蓝图,它定义了对象的属性和方法。通过创建类的实例,可以生成多个具有相同结构但不同状态的对象。

1.1 面向对象编程的基本概念

  • 类(Class):类是创建对象的模板,它定义了一组属性和方法。
  • 对象(Object):对象是类的实例,通过类创建的具体实体。
  • 属性(Attribute):属性是对象的状态或数据成员。
  • 方法(Method):方法是对象的行为或功能。
  • 封装(Encapsulation):将数据和方法封装在类中,保护对象的内部状态不被外部直接修改。
  • 继承(Inheritance):子类继承父类的属性和方法,重用代码。
  • 多态(Polymorphism):不同对象可以通过相同的接口调用不同的方法。

1.2 Python中的类和对象

在Python中,类使用class关键字定义,类中的方法必须包含一个参数self,它代表类的实例。对象是通过调用类来创建的实例。

二、定义类和创建对象

2.1 定义类

定义类时,需要指定类名和类的属性和方法。以下是一个简单的类定义:

class Person:def __init__(self, name, age):self.name = nameself.age = agedef greet(self):return f"Hello, my name is {self.name} and I am {self.age} years old."

在这个例子中,Person类有两个属性nameage,以及一个方法greet

2.2 创建对象

创建对象时,需要调用类的构造函数并传递必要的参数:

person1 = Person("Alice", 30)
person2 = Person("Bob", 25)print(person1.greet())
print(person2.greet())

2.3 __init__方法

__init__方法是类的构造函数,它在创建对象时自动调用,用于初始化对象的属性。self参数表示类的实例,允许在类的方法中访问实例的属性和方法。

2.4 self参数

self参数在类的方法中代表类的实例,它允许方法访问和修改对象的属性和方法。例如:

class Person:def __init__(self, name, age):self.name = nameself.age = agedef greet(self):return f"Hello, my name is {self.name} and I am {self.age} years old."

greet方法中,self.nameself.age访问了实例的属性nameage

三、类的属性和方法

3.1 类的属性

类的属性是类的变量,它们存储类的状态。类的属性分为实例属性和类属性。

3.1.1 实例属性

实例属性是对象的属性,通过self访问。每个实例都有自己独立的实例属性:

class Car:def __init__(self, make, model, year):self.make = makeself.model = modelself.year = yearcar1 = Car("Toyota", "Camry", 2020)
car2 = Car("Honda", "Accord", 2019)print(car1.make, car1.model, car1.year)
print(car2.make, car2.model, car2.year)
3.1.2 类属性

类属性是类的属性,通过类名访问。所有实例共享类属性:

class Car:wheels = 4def __init__(self, make, model, year):self.make = makeself.model = modelself.year = yearcar1 = Car("Toyota", "Camry", 2020)
car2 = Car("Honda", "Accord", 2019)print(Car.wheels)
print(car1.wheels)
print(car2.wheels)

3.2 类的方法

类的方法是类的函数,它们定义类的行为。方法的第一个参数必须是self,表示类的实例。

3.2.1 实例方法

实例方法是类的常规方法,通过实例调用。它们可以访问和修改实例的属性:

class Dog:def __init__(self, name, age):self.name = nameself.age = agedef bark(self):return f"{self.name} is barking."dog = Dog("Rex", 5)
print(dog.bark())
3.2.2 类方法

类方法是类级别的方法,通过类调用。它们使用@classmethod装饰器和cls参数,表示类本身:

class Dog:species = "Canis familiaris"@classmethoddef common_species(cls):return f"All dogs belong to species: {cls.species}"print(Dog.common_species())
3.2.3 静态方法

静态方法是类中的独立方法,通过类调用。它们使用@staticmethod装饰器,不需要selfcls参数:

class Math:@staticmethoddef add(x, y):return x + yprint(Math.add(5, 3))

四、继承

继承是面向对象编程的重要特性,它允许一个类继承另一个类的属性和方法,从而实现代码重用。

4.1 基本继承

定义子类时,必须在类名后面的括号中指定父类。例如:

class Animal:def __init__(self, name):self.name = namedef speak(self):raise NotImplementedError("Subclasses must implement this method.")class Dog(Animal):def speak(self):return f"{self.name} says Woof!"class Cat(Animal):def speak(self):return f"{self.name} says Meow!"dog = Dog("Rex")
cat = Cat("Whiskers")print(dog.speak())
print(cat.speak())

4.2 方法重写

子类可以重写父类的方法,通过定义一个与父类方法同名的方法:

class Animal:def __init__(self, name):self.name = namedef speak(self):return f"{self.name} makes a sound."class Dog(Animal):def speak(self):return f"{self.name} says Woof!"dog = Dog("Rex")
print(dog.speak())

4.3 使用super()函数

super()函数用于调用父类的方法,通常在子类中重写父类方法时使用:

class Animal:def __init__(self, name):self.name = namedef speak(self):return f"{self.name} makes a sound."class Dog(Animal):def __init__(self, name, breed):super().__init__(name)self.breed = breeddef speak(self):return f"{self.name} the {self.breed} says Woof!"dog = Dog("Rex", "Golden Retriever")
print(dog.speak())

五、多态

多态是面向对象编程的重要概念,它允许不同类的对象通过相同的接口调用不同的方法。通过多态,可以实现代码的通用性和灵活性。

5.1 多态示例

以下是一个多态的示例,不同类的对象通过相同的接口调用不同的方法:

class Animal:def __init__(self, name):self.name = namedef speak(self):raise NotImplementedError("Subclasses must implement this method.")class Dog(Animal):def speak(self):return f"{self.name} says Woof!"class Cat(Animal):def speak(self):return f"{self.name} says Meow!"animals = [Dog("Rex"), Cat("Whiskers")]for animal in animals:print(animal.speak())

六、综合详细例子

以下是一个综合详细的例子,展示如何使用类和对象实现一个简单的图书管理系统。

6.1 项目结构

library_management/__init__.pybook.pymember.pylibrary.py
main.py

6.2 模块代码

book.py
# library_management/book.pyclass Book:def __init__(self, title, author, isbn):self.title = titleself.author = authorself.isbn = isbnself.available = Truedef __str__(self):return f"Title: {self.title}, Author: {self.author}, ISBN: {self.isbn}, Available: {self.available}"
member.py
# library_management/member.pyclass Member:def __init__(self, name, member_id):self.name = nameself.member_id = member_idself.borrowed_books = []def borrow_book(self, book):if book.available:self.borrowed_books.append(book)book.available = Falsereturn Truereturn Falsedef return_book(self, book):if book in self.borrowed_books:self.borrowed_books.remove(book)book.available = Truereturn Truereturn Falsedef __str__(self):return f"Member Name: {self.name}, ID: {self.member_id}, Borrowed Books: {[book.title for book in self.borrowed_books]}"
library.py
# library_management/library.pyfrom .book import Book
from .member import Memberclass Library:def __init__(self):self.books = []self.members = []def add_book(self, title, author, isbn):book = Book(title, author, isbn)self.books.append(book)def add_member(self, name, member_id):member = Member(name, member_id)self.members.append(member)def find_book(self, isbn):for book in self.books:if book.isbn == isbn:return bookreturn Nonedef find_member(self, member_id):for member in self.members:if member.member_id == member_id:return memberreturn Nonedef __str__(self):return f"Library has {len(self.books)} books and {len(self.members)} members."

6.3 主程序代码

main.py
# main.pyfrom library_management.library import Librarydef main():library = Library()# 添加书籍library.add_book("The Great Gatsby", "F. Scott Fitzgerald", "1234567890")library.add_book("1984", "George Orwell", "0987654321")# 添加成员library.add_member("Alice", "M001")library.add_member("Bob", "M002")# 查找书籍和成员book = library.find_book("1234567890")member = library.find_member("M001")if book and member:# 借书if member.borrow_book(book):print(f"{member.name} borrowed {book.title}")else:print(f"{book.title} is not available.")# 还书if member.return_book(book):print(f"{member.name} returned {book.title}")else:print(f"{member.name} did not borrow {book.title}.")# 打印图书馆状态print(library)if __name__ == "__main__":main()

6.4 运行结果

Alice borrowed The Great Gatsby
Alice returned The Great Gatsby
Library has 2 books and 2 members.

七、总结

本文详细介绍了Python面向对象编程中的类和对象,包括类的定义、对象的创建、类的属性和方法、继承、多态等概念。通过综合详细的例子展示了如何在实际项目中应用这些概念。希望本文对你理解和掌握Python面向对象编程有所帮助。


欢迎点赞|关注|收藏|评论,您的肯定是我创作的动力

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

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

相关文章

解锁HTML的力量:从基础标签到完整网页构建

在整个学习编程技能的过程中,我们会始终基于编程的本质:输入-》函数处理-》输出 和编程语言的本质:语法糖、变量、基础函数,去理解各种编程技术和学习相关的技能。 今天开始学习编程的第一个技能点:HTML。正如编程的本…

2024 Snap 新款ar眼镜介绍

2024 snap 新款ar眼镜介绍 2024 Snap 新款ar眼镜介绍 助力快速掌握数据集的信息和使用方式。

EasyCVR全方位安全守护智慧电厂:构建高效视频监控系统优势分析

随着信息技术的飞速发展和数字化时代的到来,电厂作为能源供应的重要枢纽,其安全性和管理效率成为社会各界关注的焦点。为了满足电厂对高效、智能、可靠视频监控系统的需求,基于EasyCVR平台建设的电厂视频监控系统应运而生。 一、系统构成 基…

排序个人总结

插入排序 思路;定义 i 和 j,默认 i 前面的数都是有序的,j 定义为 i 的前一个数,把 i 的值给tmp,tmp与j对应的值进行比较,如果arr[j] > tmp,将arr[j] (大的数前移一位),如下图 代码&#xf…

String类常用的方法

源代码: 输出结果:

从HarmonyOS Next导出手机照片

1)打开DevEco Studio开发工具 2)插入USB数据线,连接手机 3)在DevEco Studio开发工具,通过View -> Tool Windows -> Device File Browser打开管理工具 4)选择storage -> cloud -> 100->fi…

MySQL InnoDB MVCC读写逻辑分析与调测

目标 1、构建MVCC读写场景 2、gdb调试MVCC过程,输出流程图(函数级别调用过程) 前提 准备1 打开服务端 查询mysqld进程号 线程树 打开客户端,想创建几个事务号就打开几个客户端 准备2 数据库mvcc,两个表test和stu…

韩媒专访CertiK首席商务官:持续关注韩国市场,致力于解决Web3安全及合规问题

作为Web3.0头部安全公司,CertiK在KBW期间联合CertiK Ventures举办的活动引起了业界的广泛关注。CertiK一直以来与韩国地方政府保持着紧密合作关系,在合规领域提供强有力的支持。而近期重磅升级的CertiK Ventures可以更好地支持韩国本地的区块链项目。上述…

Nmap网络扫描器基础功能介绍

怎么快速知道网络中存在哪些设备呢?我们可以借用扫描工具Nmap来实现这个功能。 下载 Windows系统可以前往Nmap官网下载安装包。 Linux使用对应的包管理器可以直接安装,命令如下 # Debian/Ubuntu apt install nmap# RedHat/Fedora yum install nmap …

数据在内存中的存储(下)

目录 前言一、浮点数在内存中的存储1.1 练习1.2 浮点数的存储1.2.1 浮点数存的过程1.2.2 浮点数取的过程 1.3 题目解析 总结 前言 前面一期我们主要说到整形在数据中的存储方式,这期我们来看看浮点数在内存中是如何存储的,话不多说,正文开始…

运行python程序

1 终端运行 1.1、直接在python解释器中书写代码 >>> print(法外狂徒) 法外狂徒 …

【数据结构初阶】排序算法(上)插入排序与选择排序

文章目录 1.排序概念及运用1. 1 概念1. 2 运用1.3 常见排序算法 2. 插入排序2. 1 直接插入排序2. 2 希尔排序2. 2. 1 希尔排序的时间复杂度 3. 选择排序3. 1 直接选择排序3. 2 堆排序3. 3 Top-K问题 1.排序概念及运用 1. 1 概念 排序:所谓排序,就是使一…

PySimpleGUI:简化 Python 中的 GUI 开发

作为一个算法工程师,避免不了需要标注数据(当然还有其他需求),标注数据时还是需要一个很好的工具,此时需要你来写一个图形用户界面(GUI),太难了~ 然而,PySim…

Java语言程序设计基础篇_编程练习题**18.34 (游戏:八皇后问题)

目录 题目:**18.34 (游戏:八皇后问题) 代码示例 代码解析 输出结果 使用文件 题目:**18.34 (游戏:八皇后问题) 八皇后问题是要找到一个解决方案,将一个皇后棋子放到棋盘上的每行中,并且两个皇后棋子之间不能相互攻击。编写个…

B-树(不是B减树)原理剖析(1)

目录 B树的主要特性: B树的操作: B树的优点: 为什么要发明出B-树? B树的概念和原理剖析 原理图讲解(部分讲解在图中) 初始化结点: 处理数据数量计算(了解) 底层代码实现(加深理解) 前些日子我们学了AVl树&…

MySQL InnoDB undo log生成逻辑分析

引用《InnoDB存储引擎》中有一句话,特别重要: 用户通常对undo有这样的误解:undo用于将数据库物理地恢复到执行语句或事务之前的样子---但事实并非如此。 undo是逻辑日志,因此只是将数据库逻辑地恢复到原来的样子。所有的修改都被…

通信工程学习:什么是NFV网络功能虚拟化

NFV:网络功能虚拟化 NFV(Network Function Virtualization),即网络功能虚拟化,是一种通过虚拟化技术实现网络功能的技术手段。它借鉴了x86服务器的架构,将传统的网络硬件设备如路由器、交换机、防火墙、负载…

neo4j:ubuntu环境下的安装与使用

一、neo4j安装 1. 下载安装包 进入网站:https://neo4j.com/deployment-center/#community 在上图中选择下载即可(社区版免费) 注意:neo4j的版本要和电脑安装的jdk版本对应,jdk版本使用java --version查看:…

华为认证HCIA篇--网络通信基础

大家好呀!我是reload。今天来带大家学习一下华为认证ia篇的网络通信基础部分,偏重一些基础的认识和概念性的东西。如果对网络通信熟悉的小伙伴可以选择跳过,如果是新手或小白的话建议还是看一看,先有个印象,好为后续的…

复制他人 CSDN 文章到自己的博客

文章目录 0.前言步骤 0.前言 在复制别人文章发布时,记得表明转载哦 步骤 在需要复制的csdn 文章页面,打开浏览器开发者工具(F12)Ctrl F 查找"article_content"标签头 右键“Copy”->“Copy element”新建一个 tx…