Day 31 类的定义和方法

一、知识点

1. 类的定义

在 Python 中,用class关键字定义类,格式为:

复制代码
class 类名:
    # 类的属性、方法

例如:class Circle: passpass是占位语句,暂不实现类内容)。

2. pass 占位语句

当类 / 方法暂时不需要写具体逻辑时,用pass占位,避免语法错误。示例:

复制代码
class EmptyClass:
    pass  # 暂时空实现

3. 类的初始化方法(init

  • 是类的 "构造方法",创建实例时自动调用,用于初始化实例属性。

  • 第一个参数必须是self(代表实例本身)。示例:

    class Person:
    def init(self, name):
    self.name = name # 给实例绑定name属性

    p = Person("小明") # 创建实例时,__init__自动执行
    print(p.name) # 输出:小明

4. 类的普通方法

  • 在类中定义的函数,需通过实例手动调用,用于实现类的功能。

  • 第一个参数也必须是self。示例:

    class Person:
    def init(self, name):
    self.name = name
    def say_hello(self): # 普通方法
    print(f"你好,我是{self.name}")

    p = Person("小红")
    p.say_hello() # 手动调用,输出:你好,我是小红

5. __init__与普通方法的核心区别

  • 调用时机:__init__是 "创建实例自动调",普通方法是 "手动调"。
  • 用途:__init__负责 "初始化属性",普通方法负责 "实现行为逻辑"。
  • 返回值:__init__必须返回None,普通方法可返回任意值。

二、作业

题目 1:定义圆(Circle)类

要求

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

示例运行代码

复制代码
# 示例运行
circle = Circle(5)
print(f"半径: {circle.radius}")  # 输出: 半径: 5
print(f"面积: {circle.calculate_area()}")  # 输出: 面积: 78.54(保留两位小数)
print(f"周长: {circle.calculate_circumference()}")  # 输出: 周长: 31.42(保留两位小数)
python 复制代码
import math 
class Circle:
    def __init__(self, radius=1):
        self.radius = radius
    def calculate_area(self):
        area = math.pi * (self.radius ** 2)
        return round(area, 2)
    def calculate_circumference(self):
        circumference = 2 * math.pi * self.radius
        return round(circumference, 2)
    
circle = Circle(5)  
print(f"半径: {circle.radius}")  
print(f"面积: {circle.calculate_area()}")  
print(f"周长: {circle.calculate_circumference()}")  
html 复制代码
半径: 5
面积: 78.54
周长: 31.42

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

要求

  1. 包含属性:长 length、宽 width
  2. 包含方法:
    • calculate_area():计算面积(公式:长 × 宽)。
    • calculate_perimeter():计算周长(公式:长宽)。
    • is_square():判断是否为正方形(长 == 宽)。
  3. 初始化时需传入长和宽,默认值均为 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()}")  # 输出: 是否为正方形: False

square = Rectangle(5, 5)
print(f"是否为正方形: {square.is_square()}")  # 输出: 是否为正方形: True
python 复制代码
class Rectangle:
    def __init__(self, length=1, width=1):
        self.length = length
        self.width = width

    def calculate_area(self):
        area = self.length * self.width
        return area

    def calculate_perimeter(self):
        perimeter = 2 * (self.length + self.width)
        return perimeter
    
    def is_square(self):
        return  self.length == self.width


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()}")  # 输出: 是否为正方形: False

square = Rectangle(5, 5)
print(f"是否为正方形: {square.is_square()}")
html 复制代码
长: 4, 宽: 6
面积: 24
周长: 20
是否为正方形: False
是否为正方形: True

题目 3:图形工厂

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

  • shape_type="circle":创建圆(参数:半径)。
  • shape_type="rectangle":创建长方形(参数:长、宽)。

示例运行代码

复制代码
shape1 = create_shape("circle", 5)
print(shape1.calculate_circumference())  # 输出: 31.42
shape2 = create_shape("rectangle", 3, 4)
print(shape2.is_square())  # 输出: False
python 复制代码
def create_shape(shape_type, *args):
    if shape_type == "circle":
        return Circle(*args)  
    elif shape_type == "rectangle":
        return Rectangle(*args)  
    else:
        raise ValueError("不支持的图形类型")



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

勇闯python的第31天@浙大疏锦行

相关推荐
初九之潜龙勿用几秒前
C#实现导出Word图表通用方法之散点图
开发语言·c#·word·.net·office·图表
3DVisionary2 分钟前
告别传统检具:蓝光3D扫描开启精密模具“数字化质检”新模式
人工智能·3d·数字化转型·质量控制·蓝光3d扫描·精密模具·可溯源
deephub2 分钟前
RAG 检索模型如何学习:三种损失函数的机制解析
人工智能·深度学习·损失函数·信息检索·rag
方见华Richard6 分钟前
伦理量子信息学:九元原子的量子信息实现
人工智能·经验分享·交互·原型模式·空间计算
Elastic 中国社区官方博客7 分钟前
Elasticsearch:监控 LLM 推理和 Agent Builder 使用 OpenRouter
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
高频交易dragon8 分钟前
Hawkes LOB Market从论文到生产
人工智能·算法·金融
CoderIsArt9 分钟前
AI代码编辑器详细实现步骤
人工智能·编辑器
历程里程碑9 分钟前
Linux 2 指令(2)进阶:内置与外置命令解析
linux·运维·服务器·c语言·开发语言·数据结构·ubuntu
王燕龙(大卫)13 分钟前
rust入门
开发语言·rust
无心水14 分钟前
2、Go语言源码文件组织与命令源码文件实战指南
开发语言·人工智能·后端·机器学习·golang·go·gopath