当前位置: 首页 > news >正文

Python入门 — 类

面向对象编程中,编写表示现实世界中的事物和情景的(class),并基于这些类来创建对象(object)。根据类来创建对象称为实例化,这样就可以使用类的实例(instance)

一、创建类

class Dog:def __init__(self, name, age):"""初始化属性 name 和 age"""self.name = nameself.age = agedef sit(self):"""模拟小狗收到命令时坐下"""print(f"{self.name} 坐下")def roll_over(self):"""模拟小狗收到命令时打滚"""print(f"{self.name} 打滚")

Dog 类创建的每个实例都将存储名字和年龄,而且每条小狗都有坐下(sit())和打滚(roll_over())的能力。

       __init__() 方法:类中的函数称为方法,__init__() 是一个特殊方法,每当根据 Dog 类创建新实例时,Python 都会自动运行它。在这个方法的名称中,开头和末尾各有两个下划线,这是一种约定,可以避免 Python 默认方法与普通方法发生名称冲突。务必确保 __init__() 的两边都有两个下划线,否则当你使用类来创建实例时,将不会自动调用这个方法。

       __init__() 方法定义成包含三个形参:self、name 和 age。在这个方法的定义中,形参 self 必不可少,而且必须位于其他形参的前面

       当 Python 调用这个方法来创建 Dog 实例时,将自动传入实参 self。每个与实例相关联的方法调用都会自动传递实参 self,该实参是一个指向实例本身的引用,让实例能够访问类中的属性和方法。当我们创建 Dog 实例时,Python 将调用 Dog 类的 __init__() 方法。我们将通过实参向 Dog() 传递名字和年龄;self 则会自动传递,不需要我们来传递。

       在 __init__() 方法内定义的两个变量都有前缀 self 。以 self 为前缀的变量可供类中的所有方法使用,可以通过类的任意实例来访问。self.name = name 获取与形参 name 相关联的值,并将其赋给变量 name,然后该变量被关联到当前创建的实例。像这样可通过实例访问的变量称为属性。

       Dog 类还定义了另外两个方法:sit() 和 roll_over() 。由于这些方法执行时不需要额外的信息,因此只有一个形参 self。

二、创建实例

在上述创建类的基础上,我们可以根据类来创建类的实例

my_dog = Dog('LL', 3)

这样就创建好实例了,接下来可以使用它的方法和属性了。

1、访问属性

my_dog.age

2、调用方法

my_dog.sit()
my_dog.roll_over()

三、使用类和实例

1、创建时给定属性默认值

class Car:def __init__(self, make, model, year):self.make = makeself.model = modelself.year = yearself.meter = 0   # 默认为0def update_meter(self, mile):self.meter = mile

2、修改属性的值

修改属性的值主要有三种方法:通过实例修改,通过方法设置,以及通过方法递增(增加特定的值)。

实例修改:

my_car = Car('aaa', 'a8', 2025)
my_car.meter = 100# 实例 my_car 中找到属性 meter,并将其值设置为 100

方法修改:

my_car = Car('aaa', 'a8', 2025)
my_car.update_meter(200)

属性的值递增修改:也是使用实例的方法进行修改,可以试试。

四、继承

       要编写的类是一个既有的类的特殊版本,可使用继承。当一个类继承另一个类时,将自动获得后者的所有属性和方法。原有的类称为父类,而新类称为子类。子类不仅继承了父类的所有属性和方法,还可定义自己的属性和方法。

1、子类的 __init__() 方法

        在既有的类的基础上编写新类,通常要调用父类的 __init__() 方法。这将初始化在父类的 __init__() 方法中定义的所有属性,从而让子类也可以使用这些属性。

class Car:def __init__(self, make, model, year):"""初始化描述汽车的属性"""self.make = makeself.model = modelself.year = yearself.meter = 0def get_descriptive_name(self):long_name = f"{self.year} {self.make} {self.model}"return long_name.title()def read_meter(self):print(f"这车开了 {self.meter} km")def update_meter(self, mile):if mile >= self.meter:self.meter = mileelse:print("只能增加,不能减少的,孩子")def increment_meter(self, miles):self.meter += milesclass ElectricCar(Car):"""电动汽车"""def __init__(self, make, model, year):"""初始化父类的属性"""super().__init__(make, model, year)my_uu = ElectricCar('BYD', 'UU', 2025)print(my_uu.get_descriptive_name())

电动汽车是汽车的子类,具备 Car 类的所有功能。在定义子类时,必须在括号内指定父类的名称。__init__() 方法接受创建 Car 实例所需的信息,super() 是一个特殊的函数,让我们能够调用父类的方法。父类也称为超类

2、给子类定义属性和方法

class ElectricCar(Car):"""电动汽车"""def __init__(self, make, model, year):"""初始化父类的属性"""super().__init__(make, model, year)my_uu = ElectricCar('BYD', 'UU', 2025)print(my_uu.get_descriptive_name())# 新增属性self.battery_size = 40# 新增方法def describe_battery(self):print(f"电池容量为{self.battery_size}-kWh.")

3、重写父类中的方法

在子类中定义一个与要重写的父类方法同名的方法。这样,Python 将忽略这个父类方法,只关注在子类中定义的相应方法。

4、将实例用作属性

使用代码模拟实物时,你可能会发现自己给类添加了太多细节:属性和方法越来越多,文件越来越长。在这种情况下,可能需要将类的一部分提取出来,作为一个独立的类。将大型类拆分成多个协同工作的小类,这种方法称为组合。

class Car:#####class Battery:def __init__(self, battery_size=75):"""初始化电池的属性"""self.battery_size = battery_sizedef describe_battery(self):print(f"电池容量为-{self.battery_size}-kWh.")class ElectricCar(Car):"""电动汽车"""def __init__(self, make, model, year):"""初始化父类的属性"""super().__init__(make, model, year)my_uu = ElectricCar('BYD', 'UU', 2025)print(my_uu.get_descriptive_name())self.battery = Battery()

       定义了一个名为 Battery 的新类,在 ElectricCar 类中,添加一个名为 self.battery 的属性。这行代码让Python 创建一个新的 Battery 实例。当 __init__() 方法被调用时,都将执行该操作,因此现在每个 ElectricCar 实例都包含一个自动创建的 Battery 实例。

相关文章:

Python入门 — 类

面向对象编程中,编写表示现实世界中的事物和情景的类(class),并基于这些类来创建对象(object)。根据类来创建对象称为实例化,这样就可以使用类的实例(instance) 一、创建…...

R-INLA实现绿地与狐狸寄生虫数据空间建模:含BYM、SPDE模型及PC先验应用可视化...

全文链接:https://tecdat.cn/?p40720 本论文旨在为对空间建模感兴趣的研究人员客户提供使用R-INLA进行空间数据建模的基础教程。通过对区域数据和地统计(标记点)数据的分析,介绍了如何拟合简单模型、构建和运行更复杂的空间模型&…...

Linux云计算SRE-第十五周

1.总结Dockerfile的指令和Docker的网络模式 一、Dockerfile 核心指令详解 1、基础构建指令 指令 功能描述 关键特性 FROM 指定基础镜像(必须为首条指令) - 支持多阶段构建:FROM node AS builder - scratch 表示空镜像 RUN 在镜像构建…...

2014年下半年试题一:论软件需求管理

论文库链接:系统架构设计师论文 论文题目 软件需求管理是一个对系统需求变更了解和控制的过程。需求管理过程与需求开发过程相互关联,初始需求导出的同时就要形成需求管理规划,一旦启动了软件开发过程需求管理活动就紧密相伴。 需求管理过程中…...

podman加速器配置,harbor镜像仓库部署

Docker加速器 registries加速器 [rootlocalhost ~]# cat /etc/redhat-release CentOS Stream release 8 [rootlocalhost ~]# cd /etc/containers/ [rootlocalhost containers]# ls certs.d policy.json registries.conf.d storage.conf oci registries.conf re…...

信息学奥赛一本通 1522:网络 | OpenJudge 百练 1144:Network

【题目链接】 ybt 1522:网络 OpenJudge 百练 1144:Network 【题目考点】 1. 图论:割点 【解题思路】 每个交换机是一个顶点,如果两地点之间有电话线连接,那么两顶点之间有一条无向边,该图是无向图。 初始时任何地…...

本地部署DeepSeek的硬件配置建议

本地部署DeepSeek的硬件配置需求因模型参数规模和部署工具不同而有所差异,以下是综合多个来源的详细要求: 1. 基础配置(适用于7B参数模型) 内存:最低8GB,推荐16GB及以上;若使用Ollama工具&…...

Redis面试题----Redis 的持久化机制是什么?各自的优缺点?

Redis 提供了两种主要的持久化机制,分别是 RDB(Redis Database)和 AOF(Append Only File),下面将详细介绍它们的原理、优缺点。 RDB(Redis Database) 原理 RDB 持久化是将 Redis 在某个时间点上的数据集快照以二进制文件的形式保存到磁盘上。可以通过手动执行 SAVE …...

C#实现本地AI聊天功能(Deepseek R1及其他模型)。

前言 1、C#实现本地AI聊天功能 WPFOllamaSharpe实现本地聊天功能,可以选择使用Deepseek 及其他模型。 2、此程序默认你已经安装好了Ollama。 在运行前需要线安装好Ollama,如何安装请自行搜索 Ollama下载地址: https://ollama.org.cn Ollama模型下载地址&#xf…...

Metal 学习笔记四:顶点函数

到目前为止,您已经完成了 3D 模型和图形管道。现在,是时候看看 Metal 中两个可编程阶段中的第一个阶段,即顶点阶段,更具体地说,是顶点函数。 着色器函数 定义着色器函数时,可以为其指定一个属性。您将在本…...

C# string转unicode字符

在 C# 中,将字符串转换为 Unicode 字符(即每个字符的 Unicode 码点)可以通过遍历字符串中的每个字符并获取其 Unicode 值来实现。Unicode 值是一个整数,表示字符在 Unicode 标准中的唯一编号。 以下是实现方法: 1. 获…...

HITCON2017SSRFME-学习复盘

代码审计 192.168.122.15 <?phpif (isset($_SERVER[HTTP_X_FORWARDED_FOR])) {$http_x_headers explode(,, $_SERVER[HTTP_X_FORWARDED_FOR]);//用逗号分割多个IP$_SERVER[REMOTE_ADDR] $http_x_headers[0];}echo $_SERVER["REMOTE_ADDR"];//给第一个IP发送请…...

【Http和Https区别】

概念&#xff1a; 一、Http协议 HTTP&#xff08;超文本传输协议&#xff09;是一种用于传输超媒体文档&#xff08;如HTML&#xff09;的应用层协议&#xff0c;主要用于Web浏览器和服务器之间的通信。http也是客户端和服务器之间请求与响应的标准协议&#xff0c;客户端通常…...

2025数学建模竞赛汇总,错过再等一年

01、2025第十届数维杯大学生数学建模挑战赛&#xff08;小国赛&#xff09; 竞赛介绍&#xff1a;数学建模行业内仅次于国赛和美赛的的第三赛事&#xff0c;被多所高校认定为国家级二类竞赛。赛题类型是国内唯一和高教社杯国赛题型风格完全一致的全国性数学建模竞赛&#xff0…...

基于SSM的《计算机网络》题库管理系统(源码+lw+部署文档+讲解),源码可白嫖!

摘 要 《计算机网络》题库管理系统是一种新颖的考试管理模式&#xff0c;因为系统是用Java技术进行开发。系统分为三个用户进行登录并操作&#xff0c;分别是管理员、教师和学生。教师在系统后台新增试题和试卷&#xff0c;学生进行在线考试&#xff0c;还能对考生记录、错题…...

ReentrantLock 用法与源码剖析笔记

&#x1f4d2; ReentrantLock 用法与源码剖析笔记 &#x1f680; 一、ReentrantLock 核心特性 &#x1f504; 可重入性&#xff1a;同一线程可重复获取锁&#xff08;最大递归次数为 Integer.MAX_VALUE&#xff09;&#x1f527; 公平性&#xff1a;支持公平锁&#xff08;按等…...

矩阵的 正定(Positive Definite)与负定(Negative Definite):从Fisher信息矩阵看“曲率”的秘密

矩阵的正定与负定&#xff1a;从Fisher信息矩阵看“曲率”的秘密 在数学和统计学中&#xff0c;矩阵的“正定性”和“负定性”是一对重要概念&#xff0c;尤其在优化、统计推断和机器学习中频繁出现。比如&#xff0c;Fisher信息矩阵&#xff08;Fisher Information Matrix, F…...

被裁20240927 --- WSL-Ubuntu20.04安装cuda、cuDNN、tensorRT

cuda、cuDNN、tensorRT的使用场景 1. CUDA&#xff08;Compute Unified Device Architecture&#xff09; 作用&#xff1a; GPU 通用计算&#xff1a;CUDA 是 NVIDIA 的并行计算平台和编程模型&#xff0c;允许开发者直接利用 GPU 的并行计算能力&#xff0c;加速通用计算任…...

uniapp写的h5跳转小程序

使用场景&#xff1a; 我们对接第三方支付的时候&#xff0c;对方只提供了原生小程序id和appid&#xff0c;由我们的app和h5平台跳转至小程序。 遇到的问题&#xff1a; app跳转本地正常&#xff0c;线上报错如下 解决办法&#xff1a; 需要去微信开放平台申请应用appid 易…...

[SWPUCTF 2022 新生赛]ez_rce

打开题目就在线环境&#xff0c;发现只有一句话&#xff1a;真的什么都没有吗 F12查看控制台和源代码也没发现任何信息&#xff0c;然后用虚拟机里面的dirsearch扫一下这个网站就能得到&#xff1a; 然后这里扫出来的结果查看的直接就是robots.txt,然后就能看到&#xff1a; …...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...