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

news2025/1/31 8:27:41

文章目录

  • 前言
  • 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 = name
        self.age = age
        self.height = height
        self.weight = weight
    
    def 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 = "动物"
    @staticmethod
    def play():
        print("playing")

Animal.play()

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

2.类方法

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

class Animal:
    name = "动物"

    @classmethod
    def 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 = name
        self.age = age
    
    def introduce(self):
        print("My name is", self.name, "and I am", self.age, "years old.")

是不是非常的简单!

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

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

import math

class Circle:
    def __init__(self, radius, color):
        self.radius = radius
        self.color = color
    
    def get_area(self):
        return math.pi * self.radius**2
 

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

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

import math

class Circle:
    def __init__(self, radius, color):
        self.radius = radius
        self.color = color
    
    def get_area(self):
        return math.pi * self.radius**2
 

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

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

class Car:
    def __init__(self, brand, color):
        self.brand = brand
        self.color = color
    
    def 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 = name
        self.score = score
    
    def 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_number
        self.balance = balance
    
    def deposit(self, amount):
        self.balance += amount
    
    def withdraw(self, amount):
        if amount <= self.balance:
            self.balance -= amount
        else:
            print("Insufficient balance.")
 

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

class Animal:
    def __init__(self, name, sound):
        self.name = name
        self.sound = sound
    
    def 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 = side1
        self.side2 = side2
        self.side3 = side3
    
    def 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 = title
        self.author = author
    
    def is_available(self):
        # Placeholder implementation
        return True
 

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

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

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

总结

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UE求职Demo开发日志#12 完善击杀获得物品逻辑和UI

1 实现思路 1.给WarehouseManager添加一个按TArray增加物品的函数 2.Enemy身上一个变量记录掉落物品&#xff0c;死亡时调用增加物品函数 3.同时调用UI显示 2 实现过程 2.1 在WarehouseManager里添加一个AddItemByArray函数 遍历数组调用添加函数 void UWarehouseManage…

安装Ubuntu22.04

1.引用教程 如何安装Ubuntu Server 22.04 LTS_ubuntu22.04 server-CSDN博客 2.空间分配 要使用 docker 比较多所以分别的 docker 空间大

【阅读笔记】基于整数+分数微分的清晰度评价算子

本文介绍的是一种新的清晰度评价算子&#xff0c;整数微分算子分数微分算子 一、概述 目前在数字图像清晰度评价函数中常用的评价函数包括三类&#xff1a;灰度梯度评价函数、频域函数和统计学函数&#xff0c;其中灰度梯度评价函数具有计算简单&#xff0c;评价效果好等优点…

scratch七彩六边形 2024年12月scratch三级真题 中国电子学会 图形化编程 scratch三级真题和答案解析

目录 scratch七彩六边形 一、题目要求 1、准备工作 2、功能实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 1、思路分析 2、详细过程 四、程序编写 五、考点分析 六、推荐资料 1、入门基础 2、蓝桥杯比赛 3、考级资料 4、视频课程 5、…

Alfresco Content Services dockerCompose自动化部署详尽操作

Alfresco Content Services docker社区部署文档 Alfresco Content Services简介 Alfresco Content Services&#xff08;简称ACS&#xff09;是一款功能完备的企业内容管理&#xff08;ECM&#xff09;解决方案&#xff0c;主要面向那些对企业级内容管理有高要求的组织。具体…

电子应用设计方案105:智能家庭AI拖把系统设计

智能家庭 AI 拖把系统设计 一、引言 智能家庭 AI 拖把系统旨在为用户提供更高效、便捷和智能化的地面清洁解决方案&#xff0c;减轻家务劳动负担。 二、系统概述 1. 系统目标 - 自动清洁地面&#xff0c;包括吸尘、拖地和擦干功能。 - 智能识别地面材质和污渍程度&#xff0c…

Spring整合Mybatis、junit纯注解

如何创建一个Spring项目 错误问题 不知道什么原因&#xff0c;大概是依赖版本不兼容、java版本不对的问题&#xff0c;折磨了好久就是搞不成。 主要原因看pom.xml配置 pom.xml配置 java版本 由于是跟着22年黑马视频做的&#xff0c;java版本换成了jdk-11&#xff0c;用21以…

深入探讨数据库索引类型:B-tree、Hash、GIN与GiST的对比与应用

title: 深入探讨数据库索引类型:B-tree、Hash、GIN与GiST的对比与应用 date: 2025/1/26 updated: 2025/1/26 author: cmdragon excerpt: 在现代数据库管理系统中,索引技术是提高查询性能的重要手段。当数据量不断增长时,如何快速、有效地访问这些数据成为了数据库设计的核…

分布式系统学习:小结

关于分布式系统的学习就暂时告一段落了&#xff0c;下面整理了个思维导图&#xff0c;只涉及分布式的一些相关概念&#xff0c;需要的可自取。后面准备写下关于AI编程相关的技术文章&#xff0c;毕竟要紧跟时代的脚步嘛 思维导图xmind文件下载地址&#xff1a;https://download…

基于STM32的阿里云智能农业大棚

目录 前言&#xff1a; 项目效果演示&#xff1a; 一、简介 二、硬件需求准备 三、硬件框图 四、CubeMX配置 4.1、按键、蜂鸣器GPIO口配置 4.2、ADC输入配置 4.3、IIC——驱动OLED 4.4、DHT11温湿度读取 4.5、PWM配置——光照灯、水泵、风扇 4.6、串口——esp8266模…

WGCLOUD使用介绍 - 如何监控ActiveMQ和RabbitMQ

根据WGCLOUD官网的信息&#xff0c;目前没有针对ActiveMQ和RabbitMQ这两个组件专门做适配 不过可以使用WGCLOUD已经具备的通用监测模块&#xff1a;进程监测、端口监测或者日志监测、接口监测 来对这两个组件进行监控

Win11画图工具没了怎么重新安装

有些朋友想要简单地把图片另存为其他格式&#xff0c;或是进行一些编辑&#xff0c;但是发现自己的Win11系统里面没有画图工具&#xff0c;这可能是因为用户安装的是精简版的Win11系统&#xff0c;解决方法自然是重新安装一下画图工具&#xff0c;具体应该怎么做呢&#xff1f;…

“AI质量评估系统:智能守护,让品质无忧

嘿&#xff0c;各位小伙伴们&#xff01;今天咱们来聊聊一个在现代社会中越来越重要的角色——AI质量评估系统。你知道吗&#xff1f;在这个快速发展的时代&#xff0c;产品质量已经成为企业生存和发展的关键。而AI质量评估系统&#xff0c;就像是我们的智能守护神&#xff0c;…

Ubuntu 顶部状态栏 配置,gnu扩展程序

顶部状态栏 默认没有配置、隐藏的地方 安装使用Hide Top Bar 或Just Perfection等进行配置 1 安装 sudo apt install gnome-shell-extension-manager2 打开 安装的“扩展管理器” 3. 对顶部状态栏进行配置 使用Hide Top Bar 智能隐藏&#xff0c;或者使用Just Perfection 直…

FPGA 使用 CLOCK_LOW_FANOUT 约束

使用 CLOCK_LOW_FANOUT 约束 您可以使用 CLOCK_LOW_FANOUT 约束在单个时钟区域中包含时钟缓存负载。在由全局时钟缓存直接驱动的时钟网段 上对 CLOCK_LOW_FANOUT 进行设置&#xff0c;而且全局时钟缓存扇出必须低于 2000 个负载。 注释&#xff1a; 当与其他时钟约束配合…

RabbitMQ模块新增消息转换器

文章目录 1.目录结构2.代码1.pom.xml 排除logging2.RabbitMQConfig.java3.RabbitMQAutoConfiguration.java 1.目录结构 2.代码 1.pom.xml 排除logging <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/PO…

机器学习:支持向量机

支持向量机&#xff08;Support Vector Machine&#xff09;是一种二类分类模型&#xff0c;其基本模型定义为特征空间上的间隔最大的广义线性分类器&#xff0c;其学习策略便是间隔最大化&#xff0c;最终可转化为一个凸二次规划问题的求解。 假设两类数据可以被 H x : w T x…

Spring Boot(6)解决ruoyi框架连续快速发送post请求时,弹出“数据正在处理,请勿重复提交”提醒的问题

一、整个前言 在基于 Ruoyi 框架进行系统开发的过程中&#xff0c;我们常常会遇到各种有趣且具有挑战性的问题。今天&#xff0c;我们就来深入探讨一个在实际开发中较为常见的问题&#xff1a;当连续快速发送 Post 请求时&#xff0c;前端会弹出 “数据正在处理&#xff0c;请…

2023年版本IDEA复制项目并修改端口号和运行内存

2023年版本IDEA复制项目并修改端口号和运行内存 1 在idea中打开server面板&#xff0c;在server面板中选择需要复制的项目右键&#xff0c;点击弹出来的”复制配置…&#xff08;Edit Configuration…&#xff09;“。如果idea上没有server面板或者有server面板但没有springbo…

微信小程序怎么制作自己的小程序?手把手带你入门(适合新手小白观看)

对于初学者来说&#xff0c;制作一款微信小程序总感觉高大上&#xff0c;又害怕学不会。不过&#xff0c;今天我就用最简单、最有耐心的方式&#xff0c;一步一步给大家讲清楚!让你知道微信小程序的制作&#xff0c;居然可以这么轻松(希望你别吓跑啊!)。文中还加了实战经验&…