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

相关推荐
AnalogElectronic12 分钟前
人工智能初级工程师认证复习纲要(高频重点标记)
人工智能
前端不太难14 分钟前
AI 原生架构:鸿蒙App的下一代形态
人工智能·架构·harmonyos
Fzuim15 分钟前
从 LLM 接口到 Agent 接口:AI 融合系统的架构演进与未来趋势分析报告
人工智能·ai·重构·架构·agent·runtime
毕设源码-邱学长6 小时前
【开题答辩全过程】以 基于Java的学校住宿管理系统的设计与实现为例,包含答辩的问题和答案
java·开发语言
rookieﻬ°7 小时前
PHP框架漏洞
开发语言·php
GISer_Jing7 小时前
AI自动化工作流:智能驱动未来(升级研究生项目!!!)
人工智能·前端框架·自动化
草捏子7 小时前
Agent Skills:让 AI 一次学会、永远记住的能力扩展方案
人工智能
NocoBase7 小时前
【2.0 教程】第 1 章:认识 NocoBase ,5 分钟跑起来
数据库·人工智能·开源·github·无代码
后端小肥肠7 小时前
OpenClaw实战|从识图到公众号内容自动化,我跑通了完整链路
人工智能·aigc·agent
猿界零零七7 小时前
pip install mxnet 报错解决方案
python·pip·mxnet