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天@浙大疏锦行

相关推荐
Warren2Lynch21 小时前
利用 AI 协作优化软件更新逻辑:构建清晰的 UML 顺序图指南
人工智能·uml
ModelWhale21 小时前
当“AI+制造”遇上商业航天:和鲸助力头部企业,构建火箭研发 AI 中台
人工智能
沐知全栈开发21 小时前
Perl 数据库连接
开发语言
ATMQuant21 小时前
量化指标解码13:WaveTrend波浪趋势 - 震荡行情的超买超卖捕手
人工智能·ai·金融·区块链·量化交易·vnpy
weixin_5091383421 小时前
语义流形探索:大型语言模型中可控涌现路径的实证证据
人工智能·语义空间
多米Domi01121 小时前
0x3f第33天复习 (16;45-18:00)
数据结构·python·算法·leetcode·链表
soldierluo21 小时前
大模型的召回率
人工智能·机器学习
Gofarlic_oms121 小时前
Windchill用户登录与模块访问失败问题排查与许可证诊断
大数据·运维·网络·数据库·人工智能
童话名剑21 小时前
人脸识别(吴恩达深度学习笔记)
人工智能·深度学习·人脸识别·siamese网络·三元组损失函数
_YiFei21 小时前
2026年AIGC检测通关攻略:降ai率工具深度测评(含免费降ai率方案)
人工智能·aigc