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

day28/60

@浙大疏锦行

DAY 28 类的定义和方法

PS:每天的内容都有示例代码的,在gitee主页 不是只有讲义的几句话,,不会还有人不知道吧

知识点回顾:

  1. 类的定义
  2. pass占位语句
  3. 类的初始化方法
  4. 类的普通方法
  5. 类的继承:属性的继承、方法的继承

作业

题目1:定义圆(Circle)类

要求:

  1. 包含属性:半径 radius。
  2. 包含方法:
  • calculate_area():计算圆的面积(公式:πr²)。
  • calculate_circumference():计算圆的周长(公式:2πr)。
  1. 初始化时需传入半径,默认值为 1。

# 示例运行
circle = Circle(5)
print(f"半径:{circle.radius}")       # 输出:半径:5
print(f"面积:{circle.calculate_area()}")   # 输出:面积:78.54(保留两位小数)
print(f"周长:{circle.calculate_circumference()}") # 输出:周长:31.42(保留两位小数)

题目2:定义长方形(Rectangle)类

  1. 包含属性:长 length、宽 width。
  2. 包含方法:
  • calculate_area():计算面积(公式:长×宽)。
  • calculate_perimeter():计算周长(公式:2×(长+宽))。 is_square() 方法,判断是否为正方形(长 == 宽)。
  1. 初始化时需传入长和宽,默认值均为 1。

rect = Rectangle(4, 6)
print(f"长:{rect.length}, 宽:{rect.width}")  # 输出:长:4, 宽:6
print(f"面积:{rect.calculate_area()}")      # 输出:面积:24
print(f"周长:{rect.calculate_perimeter()}")  # 输出:周长:20
print(f"是否为正方形:{rect.is_square()}")    # 输出:是否为正方形:Falsesquare = Rectangle(5, 5)
print(f"是否为正方形:{square.is_square()}")  # 输出:是否为正方形:True

题目3:图形工厂

创建一个工厂函数 create_shape(shape_type, *args),根据类型创建不同图形对象:图形工厂(函数或类)

shape_type="circle":创建圆(参数:半径)。

shape_type="rectangle":创建长方形(参数:长、宽)。

shape1 = create_shape("circle", 5)
print(shape1.calculate_circumference())  # 输出:31.42shape2 = create_shape("rectangle", 3, 4)
print(shape2.is_square())                # 输出:False

豆包:

好的!我会用生活中的例子来比喻这几个面向对象编程的核心概念,让它们更容易理解~

1. 类的定义

知识点解释
类是一种抽象的模板,定义了对象的属性(特征)和方法(行为)。通过类可以创建多个具有相同结构的实例对象

 

比喻
就像制作饼干的模具:

 
  • 模具(类)决定了饼干(对象)的形状(属性)和用途(方法),
  • 用同一个模具可以做出很多块饼干(实例化多个对象),
  • 每块饼干都有相同的基本特征(如圆形、巧克力味),但可以独立存在和使用。
 

代码示例

 

python

class Cookie:  # 定义一个饼干类shape = "圆形"  # 类属性:所有饼干的形状flavor = "巧克力"  # 类属性:所有饼干的口味def eat(self):  # 类方法:描述饼干的行为print(f"吃掉了一块{self.shape}的{self.flavor}饼干!")# 创建两个饼干实例
cookie1 = Cookie()
cookie2 = Cookie()cookie1.eat()  # 输出:吃掉了一块圆形的巧克力饼干!

2. pass 占位语句

知识点解释
pass是一个空语句,用于占位,让代码结构完整但暂时不执行任何操作。常见于类或函数定义中,当你还没想好具体实现时使用。

 

比喻
就像给房子设计蓝图:

 
  • 你在图纸上标记了 “这里将来要放一个沙发”(定义了一个方法或类),
  • 但现在还没决定买什么样的沙发(还没写具体代码),
  • 先用pass占个位,确保图纸(代码结构)不会报错。
 

代码示例

 

python

class FutureHouse:  # 定义一个未来的房子类def living_room(self):  # 计划在客厅放沙发pass  # 占位,以后再实现具体功能def kitchen(self):  # 计划设计厨房# 这里先写一些代码print("这是厨房的基本结构")pass  # 占位,后续添加更多功能

3. 类的初始化方法(__init__

知识点解释
__init__是类的构造函数,在创建对象时自动调用,用于初始化对象的实例属性(每个对象独有的特征)。

 

比喻
就像定制手机壳:

 
  • 手机壳工厂(类)有一个标准化流程(__init__方法),
  • 顾客(创建对象时)可以选择图案、材质等个性化参数,
  • 工厂根据这些参数生产出独一无二的手机壳(对象)。
 

代码示例

 

python

class PhoneCase:def __init__(self, pattern, material):  # 初始化方法,接收个性化参数self.pattern = pattern  # 实例属性:图案self.material = material  # 实例属性:材质def describe(self):print(f"这是一个{self.material}材质、印有{self.pattern}图案的手机壳。")# 创建两个不同的手机壳
case1 = PhoneCase("星空", "硅胶")  # 自动调用__init__,传入参数
case2 = PhoneCase("猫咪", "塑料")case1.describe()  # 输出:这是一个硅胶材质、印有星空图案的手机壳。
case2.describe()  # 输出:这是一个塑料材质、印有猫咪图案的手机壳。

4. 类的普通方法

知识点解释
类的方法是定义在类中的函数,用于描述对象的行为。方法的第一个参数通常是self,指向调用该方法的对象本身。

 

比喻
就像汽车的功能:

 
  • 汽车(对象)有 “启动”“加速”“刹车” 等功能(方法),
  • 每个功能都需要操作汽车自身的部件(访问对象的属性),
  • self就像是汽车的 “方向盘”,让方法知道操作的是哪辆车。
 

代码示例

 

python

class Car:def __init__(self, brand, color):self.brand = brandself.color = colorself.speed = 0  # 初始速度为0def start(self):  # 普通方法:启动汽车print(f"{self.color}的{self.brand}启动了!")self.speed = 10  # 修改对象的属性def accelerate(self):  # 普通方法:加速self.speed += 20print(f"加速!当前速度:{self.speed}km/h")my_car = Car("宝马", "白色")
my_car.start()  # 输出:白色的宝马启动了!
my_car.accelerate()  # 输出:加速!当前速度:30km/h

5. 类的继承:属性的继承、方法的继承

知识点解释
继承是指一个类(子类)可以继承另一个类(父类)的属性方法,从而复用代码并扩展功能。

 

比喻
就像家族传承:

 
  • 子女(子类)会继承父母(父类)的外貌特征(属性)和生活习惯(方法),
  • 同时子女也可以发展自己独特的爱好(新增属性或方法),
  • 甚至改进某些习惯(重写父类方法)。
 

代码示例

 

python

# 父类:动物
class Animal:def __init__(self, name):self.name = namedef eat(self):  # 父类方法print(f"{self.name}正在吃东西。")# 子类:狗(继承自Animal)
class Dog(Animal):  # 括号内写父类名称def __init__(self, name, breed):super().__init__(name)  # 调用父类的初始化方法self.breed = breed  # 子类新增属性def bark(self):  # 子类新增方法print(f"{self.name}({self.breed})在汪汪叫!")def eat(self):  # 重写父类方法print(f"{self.name}({self.breed})正在狼吞虎咽地吃东西!")# 创建子类实例
dog = Dog("旺财", "金毛")
dog.eat()  # 调用重写后的方法
dog.bark()  # 调用子类新增的方法

总结

  • 类的定义:像模具,定义对象的模板。
  • pass 占位:像蓝图上的空白标记,暂时不实现功能。
  • 初始化方法:像定制产品,创建对象时设置个性化属性。
  • 普通方法:像汽车功能,描述对象能做什么。
  • 继承:像家族传承,子类复用父类特性并发展自己的特性。
 

如果有任何地方没讲清楚,随时告诉我哦! 😊


代码:

import math# 题目1: 定义圆类
class Circle:def __init__(self, radius=1):self.radius = radiusdef calculate_area(self):return round(math.pi * self.radius ** 2, 2)def calculate_circumference(self):return round(2 * math.pi * self.radius, 2)# 题目2: 定义长方形类
class Rectangle:def __init__(self, length=1, width=1):self.length = lengthself.width = widthdef calculate_area(self):return self.length * self.widthdef calculate_perimeter(self):return 2 * (self.length + self.width)def is_square(self):return self.length == self.width# 题目3: 图形工厂函数
def create_shape(shape_type, *args):if shape_type == "circle":return Circle(*args)elif shape_type == "rectangle":return Rectangle(*args)else:raise ValueError("不支持的图形类型")# 测试代码
if __name__ == "__main__":# 测试圆类circle = Circle(5)print(f"半径:{circle.radius}")print(f"面积:{circle.calculate_area()}")print(f"周长:{circle.calculate_circumference()}")# 测试长方形类rect = Rectangle(4, 6)print(f"\n长:{rect.length}, 宽:{rect.width}")print(f"面积:{rect.calculate_area()}")print(f"周长:{rect.calculate_perimeter()}")print(f"是否为正方形:{rect.is_square()}")square = Rectangle(5, 5)print(f"\n是否为正方形:{square.is_square()}")# 测试图形工厂shape1 = create_shape("circle", 5)print(f"\n圆周长:{shape1.calculate_circumference()}")shape2 = create_shape("rectangle", 3, 4)print(f"是否为正方形:{shape2.is_square()}")

输出:

http://www.xdnf.cn/news/992107.html

相关文章:

  • 常用的免费网络API接口
  • 脑机新手指南(九):高性能脑文本通信:手写方式实现(上)
  • 【navigator.clipboard】复制链接弹出详情信息(模拟电商app)、页面中粘贴图片、复制文本自动添加版权信息
  • CentOS7自带的yum依然无法联网到官方源
  • 自我推荐一下
  • 关于亚马逊WOOT折扣力度
  • 中国北方GNSS业务站网积雪深度数据集(GSnow-CHINA v1.0, 12h/24h, 2013-2...
  • 【烧脑算法】三指针的降维打击:三线并行锁定解题细节
  • 数据隐私是什么?如何做好数据隐私规范?
  • Nuttx之mm_extend
  • Python数据类型大全:整型、浮点、字符串与布尔值
  • Codeforces 1029 Div3(ABCDE)
  • Windows10下利用VS2019编译JpegLib
  • seo优化新利器:AI如何让内容批量生成与排名提升双管齐下?
  • Gremlin创建schema(包括实体和关系)
  • 【质数】埃氏筛法、线性筛法(欧拉筛法)
  • 【Linux系统编程】System V
  • Java锁机制对决:ReadWriteLock vs StampedLock
  • 从0到1落地一个RAG智能客服系统
  • ConcurrentHashMap详解:原理、实现与并发控制
  • 专访伦敦发展促进署CEO:在AI与黄仁勋之外,伦敦为何给泡泡玛特和比亚迪留了C位?
  • MySQL优化器
  • 3.3.1_2 检错编码(循环冗余校验码)
  • 【完整源码+数据集+部署教程】安检爆炸物检测系统源码和数据集:改进yolo11-REPVGGOREPA
  • 接口测试之文件上传
  • 【完整源码+数据集+部署教程】石材实例分割系统源码和数据集:改进yolo11-CA-HSFPN
  • 【Docker】快速入门与项目部署实战
  • Haclon例程1-<剃须刀片检测程序详解>
  • < 买了个麻烦 (二) 618 京东云--轻量服务器 > “可以为您申请全额退订呢。“ 工单记录:可以“全额退款“
  • linux引导过程与服务控制