当前位置: 首页 > 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,最后的最后:
!【制作不易】【一圈三连】【点个关注】!

http://www.lryc.cn/news/527227.html

相关文章:

  • 项目概述与规划 (I)
  • mysql学习笔记-数据库的设计规范
  • 实现B-树
  • 论文笔记(六十三)Understanding Diffusion Models: A Unified Perspective(四)
  • C# 中 default 使用详解
  • Day21-【软考】短文,计算机网络开篇,OSI七层模型有哪些协议?
  • 电力晶体管(GTR)全控性器件
  • C语言------指针从入门到精通
  • 网络安全大模型和人工智能场景及应用理解
  • 大模型正确调用方式
  • rocketmq原理源码分析之控制器模式- dledger
  • Deployment 部署 Pod 流程
  • 塔罗牌(基础):大阿卡那牌
  • TCP/IP 协议:互联网通信的基石
  • Python 之 Excel 表格常用操作
  • 2025春招 SpringCloud 面试题汇总
  • jupyter版本所引起的扩展插件问题
  • 01机器学习入门
  • 实现一个安全且高效的图片上传接口:使用ASP.NET Core和SHA256哈希
  • PyTorch中的movedim、transpose与permute
  • HTTP(1)
  • C#常考随笔2:函数中多次使用string的+=处理,为什么会产生大量内存垃圾(垃圾碎片),有什么好的方法可以解决?
  • leetcode刷题记录(一百)——121. 买卖股票的最佳时机
  • MATLAB绘图时线段颜色、数据点形状与颜色等设置,介绍
  • CIMRTS材质美化--放大采样、缩小采样
  • P8738 [蓝桥杯 2020 国 C] 天干地支
  • PyCharm接入DeepSeek实现AI编程
  • Java编程语言:辉煌的历史与未来前景
  • 麦田物语学习笔记:保存和加载场景中的物品
  • 页高速缓存与缓冲区缓存的应用差异