Python入门手册:类和对象

article/2025/7/28 11:12:25

在这里插入图片描述

在Python中,面向对象编程(OOP)是一种核心的编程范式。通过类和对象,我们可以模拟现实世界中的事物和行为,使代码更加模块化、可复用和易于维护。今天,就让我们深入探讨Python中的类和对象,包括它们的概念、定义、实例化,以及面向对象编程中的重要特性:继承、多态和封装。

一、类和对象的概念

1. 什么是类?

类(Class)是面向对象编程中的一个核心概念,它是一个抽象的模板,用于定义对象的结构和行为。类可以包含属性(变量)和方法(函数)。通过类,我们可以创建具有相同属性和方法的对象。

2. 什么是对象?

对象(Object)是类的一个实例。当我们根据类创建一个对象时,这个对象就拥有了类定义的所有属性和方法。每个对象都是独立的,可以有自己的属性值。

3. 一个简单的例子

让我们通过一个简单的例子来理解类和对象的概念。假设我们有一个Car类,它定义了汽车的基本属性和行为:

# 定义一个Car类
class Car:def __init__(self, make, model, year):self.make = make  # 汽车制造商self.model = model  # 汽车型号self.year = year  # 汽车生产年份def start_engine(self):print(f"{self.year} {self.make} {self.model}'s engine is starting.")def stop_engine(self):print(f"{self.year} {self.make} {self.model}'s engine is stopping.")

在这个例子中,Car类有两个属性:make(制造商)和model(型号),以及两个方法:start_engine(启动引擎)和stop_engine(停止引擎)。

4. 创建对象

我们可以通过Car类创建具体的汽车对象:

# 创建一个Car对象
my_car = Car("Toyota", "Corolla", 2020)# 调用对象的方法
my_car.start_engine()  # 输出:2020 Toyota Corolla's engine is starting.
my_car.stop_engine()   # 输出:2020 Toyota Corolla's engine is stopping.

在这个例子中,my_carCar类的一个实例,它具有Car类定义的所有属性和方法。

二、类的定义和实例化

1. 类的定义

在Python中,使用class关键字定义一个类。类的定义通常包括构造方法(__init__)和普通方法。

class MyClass:def __init__(self, param1, param2):self.param1 = param1self.param2 = param2def my_method(self):print(f"Param1: {self.param1}, Param2: {self.param2}")

2. 实例化

实例化是指根据类创建对象的过程。在Python中,通过类名后跟括号并传入参数来创建对象。

# 实例化MyClass
my_object = MyClass("value1", "value2")# 调用对象的方法
my_object.my_method()  # 输出:Param1: value1, Param2: value2

三、继承和多态

1. 继承

继承是面向对象编程中的一个重要特性,它允许一个类继承另一个类的属性和方法。在Python中,通过在类定义时在类名后跟括号并指定父类名来实现继承。

# 定义一个父类
class Animal:def __init__(self, name):self.name = namedef speak(self):pass# 定义一个子类
class Dog(Animal):def speak(self):return f"{self.name} says Woof!"# 定义另一个子类
class Cat(Animal):def speak(self):return f"{self.name} says Meow!"

在这个例子中,DogCat类继承了Animal类。它们都可以调用Animal类的__init__方法来初始化name属性,并且可以重写Animal类的speak方法来实现自己的行为。

2. 多态

多态是指不同类的对象可以对同一方法做出不同的响应。在Python中,多态主要通过方法重写来实现。

# 创建Animal对象
my_dog = Dog("Buddy")
my_cat = Cat("Whiskers")# 调用speak方法
print(my_dog.speak())  # 输出:Buddy says Woof!
print(my_cat.speak())  # 输出:Whiskers says Meow!

在这个例子中,my_dogmy_cat都是Animal类的实例,但它们对speak方法做出了不同的响应。

四、封装和访问控制

1. 封装

封装是面向对象编程中的另一个重要特性,它将数据和操作数据的方法封装在一起,形成一个独立的对象。封装可以隐藏内部实现细节,只暴露必要的接口。

在Python中,可以通过使用双下划线__来定义私有属性和方法,这些属性和方法只能在类的内部访问。

class BankAccount:def __init__(self, balance):self.__balance = balance  # 私有属性def deposit(self, amount):self.__balance += amountdef withdraw(self, amount):if amount <= self.__balance:self.__balance -= amountelse:print("Insufficient funds")def get_balance(self):return self.__balance

在这个例子中,__balance是一个私有属性,只能通过depositwithdrawget_balance方法来访问和修改。

2. 访问控制

Python提供了三种访问控制级别:

  • 公有(Public):默认情况下,所有属性和方法都是公有的,可以在类的外部访问。
  • 受保护(Protected):使用单下划线_定义受保护的属性和方法,这些属性和方法在类的外部可以访问,但不建议直接访问。
  • 私有(Private):使用双下划线__定义私有的属性和方法,这些属性和方法只能在类的内部访问。
class MyClass:def __init__(self):self.public_var = "Public"self._protected_var = "Protected"self.__private_var = "Private"def public_method(self):print("This is a public method")def _protected_method(self):print("This is a protected method")def __private_method(self):print("This is a private method")

在这个例子中,public_varpublic_method是公有的,_protected_var_protected_method是受保护的,__private_var__private_method是私有的。

总结

通过类和对象,Python的面向对象编程提供了一种强大的方式来模拟现实世界中的事物和行为。通过继承和多态,我们可以实现代码的复用和灵活性;通过封装和访问控制,我们可以隐藏内部实现细节,保护数据的安全性。希望这篇文章能帮助你更好地理解Python中的类和对象,以及面向对象编程的核心概念。


http://www.hkcw.cn/article/qrYCYyvwEZ.shtml

相关文章

从冷上电到main()函数,Bootloader都做了什么?

目录 1、硬件初始化 2、引导模式与应用模式的抉择 3、启动代码 在嵌入式系统中&#xff0c;从设备上电到执行应用程序的main()函数&#xff0c;Bootloader扮演着至关重要的角色。作为系统启动的首个程序&#xff0c;Bootloader负责初始化硬件、设置运行环境&#xff0c;并最…

电路图识图基础知识-保护环节、自锁环节及互锁环节(十)

1 电路中的自锁环节 自锁环节是指继电器得电后能通过自身的常开触点闭合&#xff0c;给其线圈供电的环节。如图所示的电路图中&#xff0c;辅助电路中并联于启动按钮开关SB2 旁边的KM 常开触点就是自锁环节(此触 电称为自锁触电)。 图中所示的自锁过程是&#xff1a;当QK 闭合后…

Linux Windows之wsl安装使用简介

参考资料 如何使用 WSL 在 Windows 上安装 Linuxwindows11 安装WSL2全流程旧版 WSL 的手动安装步骤 目录 一. 前期准备1.1 确认windows的版本1.2 开启Linux子系统的支持1.2.1 图形化方式1.2.2 命令行方式 1.3 安装wsl软件1.4 安装Linux分发版 二. 基本配置2.1 Windows Termina…

网红家装企业上海总部人去楼空 欠款风波引关注

端午节放假前,每天有上百人来找住范儿,因为公司欠了不少钱。6月1日下午,记者来到住范儿上海公司所在地,发现公司大门被木板封得严严实实。守在门口的保安指着木板上的通知对记者说:“也省得你报警了,直接打派出所电话吧。”据官网介绍,住范儿是家居建材新零售服务商,成…

正则表达式笔记

正则表达式笔记 前言一、基本字符匹配二、字符类三、量词四、定位符五、贪婪匹配和非贪婪匹配六、旗标七、分组和引用八、前瞻九、后顾 前言 参考GeekHour视频和资料&#xff0c;讲的挺好的&#xff0c;B站有[GeekHour正则表达式] 正则表达式在线工具网站&#xff1a;https://…

齐达内拒利雅得新月一亿欧年薪合同 静候法国国家队帅位

齐达内拒绝了利雅得新月开出的1亿欧元年薪合同。沙特球队利雅得新月正在寻找新主帅,并希望邀请赋闲在家的齐达内。利雅得新月愿意为齐达内支付一亿欧元年薪,签约一年,让他率队参加今夏世俱杯。然而,齐达内已经拒绝了这份高薪邀请。随后,利雅得新月开始联系国米主帅小因扎吉…

【论文解读】DETR | End-to-End Object Detection with Transformers

论文地址&#xff1a;https://arxiv.org/pdf/2005.12872 代码地址&#xff1a;https://github.com/facebookresearch/detr 摘要 本研究提出了一种新的方法&#xff0c;该方法将目标检测视为一个直接的集合预测问题。本研究的方法简化了检测流程&#xff0c;有效地消除了对许多…

(C++)STL:string类(三)非成员重载函数和类型转化函数解析使用

string类&#xff08;三&#xff09; 非成员重载函数relational operaters 关系运算符operatoroperator<< operator>>getline <string>头文件内的函数string转化为数字类型其他数值类型转化为string练习&#xff1a;字符串最后一个单词的长度 非成员重载函数…

[Python] Python运维:系统性能信息模块psutil和系统批量运维管理器paramiko

初次学习&#xff0c;如有错误还请指正 目录 系统性能信息模块psutil 获取系统性能信息 CPU信息 内存信息 磁盘信息 网络信息 其他信息 进程信息 实用的IP地址处理模块IPy IP地址、网段的基本处理 多网络计算方法 系统批量运维管理器paramiko paramiko 的安装 Li…

声光控灯电路Multisim仿真

5V交流源充当声音信号源&#xff0c;可调电阻充当光敏电阻。 白天&#xff0c;不管是否有声音&#xff0c;灯都不会亮。 夜晚&#xff0c;当有声音时&#xff0c;灯亮一段时间&#xff0c;然后熄灭。 仿真时遇到的问题&#xff1a; 问题1、必须按照一定的流程才能正常运行。…

Blueprints - List View Widget

一些学习笔记归档&#xff1b; 需要读取动态数据把多个条目显示在UI上的时候&#xff0c;可能用到List View组件&#xff1b;假如有Widget要使用在List View中&#xff0c;此Widget需要继承相关接口&#xff1a; 这样就能在List View控件中选择已经继承接口的Widget组件了&…

七.MySQL内置函数

1.日期函数 MySQL 日期与时间函数对照表 函数名称描述current_date()当前日期&#xff08;格式&#xff1a;YYYY-MM-DD&#xff09;current_time()当前时间&#xff08;格式&#xff1a;HH:MM:SS&#xff09;current_timestamp()当前日期和时间&#xff08;等同于 now()&#x…

神经网络与Transformer详解

1. 一个模型的典型场景 对用户咨询的法律问题做自动归类: 婚姻纠纷、劳动纠纷、合同纠纷、债权债务、房产纠纷、交通事故、医疗纠纷、版权纠纷 2. 模型就是一个数学公式 我们一般将这样的问题描述为:给定一组输入数据,经过一系列数学公式计算后,输出n个概率,分别代表该…

《Python基础》第2期:环境搭建

在开始编写 Python 代码前&#xff0c;还需要搭建 Python 的开发环境。 电脑是没办法直接读懂 Python 代码的&#xff0c;而是需要一个解释器&#xff0c;实时把代码翻译成字节码&#xff0c;字节码再转换成 0 和 1&#xff0c;电脑就能读懂了。 Python 的运行过程就是翻译一行…

多线程——定时任务ScheduledThreadPoolExecutor用法

创建 同样是用Executors工具类&#xff1a; 创建定时任务线程池 还有一个重载方法 接收一个额外的参数&#xff1a;线程工厂 创建单个定时任务执行器&#xff1a; 重载&#xff1a;也接收一个线程工厂 区别说明 singleThread&#xff1a; 这里可以new, 说明他是一个类 传…

AI 代理框架:使用正确的工具构建更智能的系统

AI 代理框架&#xff1a;使用正确的工具构建更智能的系统 探索 AI 代理框架如何支持从单代理设置到复杂的多代理编排的自主工作流。了解它们有何不同、何时使用它们以及如何开始使用实际工具。 AI 代理框架 从本质上讲&#xff0c;AI 代理是可以感知、计划和行动的程序。它们旨…

计算机网络 TCP篇常见面试题总结

目录 TCP 的三次握手与四次挥手详解 1. 三次握手&#xff08;Three-Way Handshake&#xff09; 2. 四次挥手&#xff08;Four-Way Handshake&#xff09; TCP 为什么可靠&#xff1f; 1. 序列号与确认应答&#xff08;ACK&#xff09; 2. 超时重传&#xff08;Retransmis…

系统架构设计师(一):计算机系统基础知识

系统架构设计师&#xff08;一&#xff09;&#xff1a;计算机系统基础知识 引言计算机系统概述计算机硬件处理器处理器指令集常见处理器 存储器总线总线性能指标总线分类按照总线在计算机中所处的位置划分按照连接方式分类按照功能分类 接口接口分类 计算机软件文件系统文件类…

软件无线电关键技术之正交调制技术

与传统调制方式相比&#xff0c;IQ 调制不直接对相位或频率调制&#xff0c;而是简单的对载波及其正交量进行线性调制&#xff0c;进而达到相位或频率调制的效果。IQ 调制具有较高的数据传输速率&#xff0c;高频带利用率&#xff0c;可有效抑制镜频边带以及易于实现等优势&…

comfyui利用 SkyReels-V2直接生成长视频本地部署问题总结 1

在通过桌面版comfyUI 安装ComfyUI-WanVideoWrapper 进行SkyReels-V2 生成长视频的过程中&#xff0c;出现了&#xff0c;很多错误。 总结一下&#xff0c;让大家少走点弯路 下面是基于搜索结果的 ComfyUI 本地部署 SkyReels-V2 实现长视频生成的完整指南&#xff0c;涵盖环境配…