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

|Python新手小白中级教程|第二十九章:面向对象编程(Python类的拓展延伸与10道实操题目)(5)

文章目录

  • 前言
  • 1.类变量与实例变量
  • 2.静态方法和类方法
    • 1.静态方法
    • 2.类方法
  • 3.实操使用
    • 1. 创建一个名为Person的类,包含属性name和age,并且有一个方法introduce()用于介绍自己的名字和年龄。
    • 2. 创建一个名为Circle的类,包含属性radius和color,并且有一个方法get_area()用于计算圆的面积。
    • 3. 创建一个名为Rectangle的类,包含属性length和width,并且有一个方法get_perimeter()用于计算矩形的周长。
    • 4. 创建一个名为Car的类,包含属性brand和color,并且有一个方法start()用于启动汽车。
    • 5. 创建一个名为Student的类,包含属性name和score,并且有一个方法get_grade()用于根据分数返回相应的等级。
    • 6. 创建一个名为BankAccount的类,包含属性account_number和balance,并且有一个方法deposit()用于存款和一个方法withdraw()用于取款。
    • 7. 创建一个名为Animal的类,包含属性name和sound,并且有一个方法make_sound()用于发出动物的叫声。
    • 8. 创建一个名为Triangle的类,包含属性side1、side2和side3,并且有一个方法is_equilateral()用于判断三角形是否为等边三角形。
    • 9. 创建一个名为Book的类,包含属性title和author,并且有一个方法is_available()用于判断书籍是否可借阅。
    • 10. 创建一个名为Bank的类,包含属性name和branches,并且有一个方法add_branch()用于添加新的分支。
  • 总结

前言

hello,大家好,我是BoBo仔吖。转眼间,已经29章过去了,Python的教程即将迈入一个新的篇章——模块化编程。作为Python基础的收尾部分,这一章将要说些什么?快接着往下看!


1.类变量与实例变量

上来就扯这个,想必不会太难。
这里我们的实例变量就是我们调用类是使用的变量形式,就像这样:

class Animal:def say(self):print('Animal')class Dog(Animal):def say(self):print('Dog')class Cat(Animal):def say(self):print('Cat')dog = Dog()
cat = Cat()

这是一个我们上节课的例子
这里我们的dog和cat就是实例变量

那么,什么是类变量呢?
其实,类变量之前我们也接触过,就是在初识类的一讲中是提到过的

class Person:def __init__(self,name,age,height,weight):#‘赋值1’self.name = nameself.age = ageself.height = heightself.weight = weightdef print_person(self):print('姓名',self.name)print('年龄',self.age)print('身高',self.height)print('体重',self.weight)

这里的name age height weight就是类变量
其实我们的类变量不像我们的私有方法与私有属性不同,在实例中类变量也是可以调用的
接下来我们来看一个类Animal的实例

class Animal:name = '动物'#这里的name就是类变量dog = Animal()
cat = Animal()print(dog.name)
print(cat.name)Animal.name = '哺乳类动物'print(dog.name)
print(cat.name)

这个程序的输出大家可以自己试试

这里我们调用了name类变量
这里我们还出现了两个实例变量dog和cat
它们调用了Animal类中的内容,调用代码就是这两行:(前)

print(dog.name)
print(cat.name)

然后,我们name稍稍调整了一下,变成了这样:


Animal.name = '哺乳类动物'print(dog.name)
print(cat.name)

这两个操作就是类变量调用

2.静态方法和类方法

静态方法和类变量都点相似,静态方法在定义类时就已经被分配定义好了。
静态方法并不绑定类也不绑定实例,相当于给方法添加了一个前缀。定义静态方法将引入一个新的概念——装饰器。
在这里插入图片描述
(PS:这里我们只要知道使用方法即可,详细介绍会在后期的文章中展开,敬请期待!)

1.静态方法

定义静态方法:

class Animal:name = "动物"@staticmethoddef play():print("playing")Animal.play()

看到这里的@staticmethod了吗?
这就是装饰器语法!
输出也就是playing
正如这个例子写的,定义静态方法的语法就是在定义函数的上面一行(不能有空行)添加一句 @staticmethod。敬爱方法不再有第一个默认参数self,所以静态方法本身也不能调用成员变量和成员方方法。静态方法不需要实例化之后使用,和类变量一样直接使用即可,其他的和一般的函数没有任何区别。

2.类方法

类方法,顾名思义就是该方法绑定在定义的类的上面,而不是绑定在实例上
定义类方法:

class Animal:name = "动物"@classmethoddef play(cls):print(cls.name,"playing")Animal.play()

在这里插入图片描述
从这个例子可以看出,定义类方法的方法和定义静态方法的方法有点相似,是在定义类方法的前一行(不能有空行)添加一句装饰语法“@classmethod”。
和静态方法不同的是,类方法和成员方法一样都有一个初始的参数,但是这个参数不同于成员方法。成员方法的第一个参数cls指向的是实例,而类方法指向的则是定义的类的本身,所以类方法可以读取和修改类变量。

好了,这就是面向对象编程的所有拓展内容了,大家可以简单了解一下,难度其实并不大.
学了这么多,到了大显身手的时候咯。

3.实操使用

1. 创建一个名为Person的类,包含属性name和age,并且有一个方法introduce()用于介绍自己的名字和年龄。

这道题不难的啦,大家用第一节课的内容就能解决啦。

class Person:def __init__(self, name, age):self.name = nameself.age = agedef introduce(self):print("My name is", self.name, "and I am", self.age, "years old.")

是不是非常的简单!

2. 创建一个名为Circle的类,包含属性radius和color,并且有一个方法get_area()用于计算圆的面积。

这个大家就需要用到math库进行画圆

import mathclass Circle:def __init__(self, radius, color):self.radius = radiusself.color = colordef get_area(self):return math.pi * self.radius**2

至于具体的原因,大家可以自己了解一下,或者看看我关于math库的文章!

3. 创建一个名为Rectangle的类,包含属性length和width,并且有一个方法get_perimeter()用于计算矩形的周长。

import mathclass Circle:def __init__(self, radius, color):self.radius = radiusself.color = colordef get_area(self):return math.pi * self.radius**2

这个和上面的circle异曲同工,原理也非常简单!

4. 创建一个名为Car的类,包含属性brand和color,并且有一个方法start()用于启动汽车。

class Car:def __init__(self, brand, color):self.brand = brandself.color = colordef start(self):print("The", self.color, self.brand, "car has started.")

5. 创建一个名为Student的类,包含属性name和score,并且有一个方法get_grade()用于根据分数返回相应的等级。

class Student:def __init__(self, name, score):self.name = nameself.score = scoredef get_grade(self):if self.score >= 90:return "A"elif self.score >= 80:return "B"elif self.score >= 70:return "C"elif self.score >= 60:return "D"else:return "F"

6. 创建一个名为BankAccount的类,包含属性account_number和balance,并且有一个方法deposit()用于存款和一个方法withdraw()用于取款。

class BankAccount:def __init__(self, account_number, balance):self.account_number = account_numberself.balance = balancedef deposit(self, amount):self.balance += amountdef withdraw(self, amount):if amount <= self.balance:self.balance -= amountelse:print("Insufficient balance.")

7. 创建一个名为Animal的类,包含属性name和sound,并且有一个方法make_sound()用于发出动物的叫声。

class Animal:def __init__(self, name, sound):self.name = nameself.sound = sounddef make_sound(self):print("The", self.name, "goes", self.sound)

8. 创建一个名为Triangle的类,包含属性side1、side2和side3,并且有一个方法is_equilateral()用于判断三角形是否为等边三角形。

class Triangle:def __init__(self, side1, side2, side3):self.side1 = side1self.side2 = side2self.side3 = side3def is_equilateral(self):return self.side1 == self.side2 == self.side3

9. 创建一个名为Book的类,包含属性title和author,并且有一个方法is_available()用于判断书籍是否可借阅。

class Book:def __init__(self, title, author):self.title = titleself.author = authordef is_available(self):# Placeholder implementationreturn True

10. 创建一个名为Bank的类,包含属性name和branches,并且有一个方法add_branch()用于添加新的分支。

class Bank:def __init__(self, name):self.name = nameself.branches = []def add_branch(self, branch_name):self.branches.append(branch_name)

后面即可就和我们在第28章讲的内容差不多。
这种东西非常的具有实用性哦,大家要好好学习!

总结

好了,终于,历时5章的面向对象编程终于结束啦!

大家一定要把我们的文章好好看,好好学,好好看!
这里的10个实例,既生动又形象,实用性刚刚滴!

在这里插入图片描述
ok,最后的最后:
!【制作不易】【一圈三连】【点个关注】!

相关文章:

|Python新手小白中级教程|第二十九章:面向对象编程(Python类的拓展延伸与10道实操题目)(5)

文章目录 前言1.类变量与实例变量2.静态方法和类方法1.静态方法2.类方法 3.实操使用1. 创建一个名为Person的类&#xff0c;包含属性name和age&#xff0c;并且有一个方法introduce()用于介绍自己的名字和年龄。2. 创建一个名为Circle的类&#xff0c;包含属性radius和color&am…...

项目概述与规划 (I)

项目概述与规划 (I) JavaScript的学习已经接近尾声了&#xff0c;最后我们将通过一个项目来讲我们在JavaScript中学习到的所有都在这个项目中展现出来&#xff0c;这个项目的DEMO来自于Udemy中的课程&#xff0c;作者是Jonas Schmedtmann&#xff1b; 项目规划 项目步骤 用户…...

mysql学习笔记-数据库的设计规范

1、范式简介 在关系型数据库中&#xff0c;关于数据表设计的基本原则、规则就称为范式。 1.1键和相关属性的概念 超键:能唯一标识元组的属性集叫做超键。 候选键:如果超键不包括多余的属性&#xff0c;那么这个超键就是候选键 主键:用户可以从候选键中选择一个作为主键。 外…...

实现B-树

一、概述 1.历史 B树&#xff08;B-Tree&#xff09;结构是一种高效存储和查询数据的方法&#xff0c;它的历史可以追溯到1970年代早期。B树的发明人Rudolf Bayer和Edward M. McCreight分别发表了一篇论文介绍了B树。这篇论文是1972年发表于《ACM Transactions on Database S…...

论文笔记(六十三)Understanding Diffusion Models: A Unified Perspective(四)

Understanding Diffusion Models: A Unified Perspective&#xff08;四&#xff09; 文章概括学习扩散噪声参数&#xff08;Learning Diffusion Noise Parameters&#xff09;三种等效的解释&#xff08;Three Equivalent Interpretations&#xff09; 文章概括 引用&#xf…...

C# 中 default 使用详解

总目录 前言 在C#中&#xff0c;default 关键字用于表示类型默认值。它可以根据上下文推断出适用的类型&#xff0c;并返回该类型的默认值。随着C#版本的发展&#xff0c;default 的用法也变得更加丰富和灵活。本文将详细介绍 default 在不同场景下的使用方法及其最佳实践。 一…...

Day21-【软考】短文,计算机网络开篇,OSI七层模型有哪些协议?

文章目录 OSI七层模型有哪些&#xff1f;有哪些协议簇&#xff1f;TCP/IP协议簇中的TCP协议三次握手是怎样的&#xff1f;基于UDP的DHCP协议是什么情况&#xff1f;基于UDP的DNS协议是什么情况&#xff1f; OSI七层模型有哪些&#xff1f; 题目会考广播域 有哪些协议簇&#x…...

电力晶体管(GTR)全控性器件

电力晶体管&#xff08;Giant Transistor&#xff0c;GTR&#xff09;是一种全控性器件&#xff0c;以下是关于它的详细介绍&#xff1a;&#xff08;模电普通晶体管三极管进行对比学习&#xff09; 基本概念 GTR是一种耐高电压、大电流的双极结型晶体管&#xff08;BJT&am…...

C语言------指针从入门到精通

第一部分: 前言: 本篇文章主要划分为两大部分: 第一部分适合零基础的同学,主要学习了解指针的概念&#xff0c;对指针大概有个概念。如果你已经有基础,即可跳过第一部分的内容。 第二部分主要是分解指针的实现逻辑,通过19个例子,再结合代码公式把不同类型的指针及指针的应用详细…...

网络安全大模型和人工智能场景及应用理解

本文通过通俗易懂的方式的进行阐述&#xff0c;大家读完觉得有帮助记得及时关注和点赞&#xff01;&#xff01;&#xff01; 一、网络安全大模型的概述 网络安全大模型是一种用于识别和应对各种网络安全威胁的模型。它通过分析网络数据包、网络行为等信息&#xff0c;识别潜在…...

大模型正确调用方式

1、ollama 安装 curl -fsSL https://ollama.com/install.sh | sh 如果是AutoDl服务器&#xff0c;可以开启学术加速。 source /etc/network_turbo 本次使用腾讯云Cloud Studio&#xff0c;所以已经安装好了 Ollama 2、启动 ollama run 模型的名字 ollama serve # 开启服务 olla…...

rocketmq原理源码分析之控制器模式- dledger

简介 RocketMQ 4.5 版本之前&#xff0c;RocketMQ 的broker是 Master/Slave部署架构&#xff0c;一组 broker 有一个 Master &#xff0c;有0到若干Slave&#xff0c;Slave复制Master消息存储&#xff0c;随时替代下线的Master。Master/Slave部署架构提供一定的高可用性&#x…...

Deployment 部署 Pod 流程

文章目录 k8s组件介绍部署文件示例部署 Pod 流程创建 Service 通过创建 Deployment 资源&#xff0c;来看看 k8s 部署 Pod 流程 k8s组件介绍 首先看看 k8s 各组件功能。 control plane 控制平面主要包含以下组件&#xff1a; kube-api-server: 顾名思义&#xff0c;负责处理所…...

塔罗牌(基础):大阿卡那牌

塔罗牌&#xff08;基础&#xff09; 大啊卡那牌魔术师女祭司皇后皇帝教皇恋人战车力量隐士命运之轮正义吊人死神节制恶魔高塔星星月亮太阳审判世界 大啊卡那牌 魔术师 作为一个起点&#xff0c;象征&#xff1a;意识行动和创造力。 一个【显化】的概念&#xff0c;即是想法变…...

TCP/IP 协议:互联网通信的基石

TCP/IP 协议:互联网通信的基石 引言 TCP/IP协议,全称为传输控制协议/互联网协议,是互联网上应用最为广泛的通信协议。它定义了数据如何在网络上传输,是构建现代互联网的基础。本文将深入探讨TCP/IP协议的原理、结构、应用以及其在互联网通信中的重要性。 TCP/IP 协议概述…...

Python 之 Excel 表格常用操作

示例文件 test.xlsx 将各个表单拆分成单独的 Excel 文件 import os.pathimport openpyxl import pandasdef handle_excel(file_path):dirname os.path.dirname(file_path)basename os.path.basename(file_path).split(".")[0]wb openpyxl.load_workbook(file_pat…...

2025春招 SpringCloud 面试题汇总

大家好&#xff0c;我是 V 哥。SpringCloud 在面试中属于重灾区&#xff0c;不仅是基础概念、组件细节&#xff0c;还有高级特性、性能优化&#xff0c;关键是项目实践经验的解决方案&#xff0c;都是需要掌握的内容&#xff0c;正所谓打有准备的仗&#xff0c;秒杀面试官&…...

jupyter版本所引起的扩展插件问题

文章目录 如何永久切换python安装源为https://mirrors.aliyun.com/pypi/simple方法一&#xff1a;通过配置文件永久设置&#xff08;推荐&#xff09;步骤 1&#xff1a;创建或修改 pip 配置文件步骤 2&#xff1a;验证配置是否生效 方法二&#xff1a;通过命令行直接配置效果验…...

01机器学习入门

机器学习入门可以分为以下几个阶段&#xff0c;逐步掌握核心概念和技能&#xff1a; 1. 基础准备 数学基础 线性代数&#xff1a;矩阵运算、向量空间&#xff08;推荐《线性代数及其应用》&#xff09;。概率与统计&#xff1a;概率分布、贝叶斯定理、假设检验&#xff08;推…...

实现一个安全且高效的图片上传接口:使用ASP.NET Core和SHA256哈希

实现一个安全且高效的图片上传接口&#xff1a;使用ASP.NET Core和SHA256哈希 在现代Web应用程序中&#xff0c;图片上传功能是常见的需求之一。无论是用户头像、产品图片还是文档附件&#xff0c;确保文件上传的安全性和效率至关重要。本文将详细介绍如何使用ASP.NET Core构建…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

NPOI Excel用OLE对象的形式插入文件附件以及插入图片

static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】&#xff0c;注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录&#xff08;即exe所在文件夹&#xff09;加入系统变量…...