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

相关推荐
zabr5 分钟前
前端已死?我用 Trae + Gemini 零代码手搓 3D 塔罗牌,找到了新出路
前端·人工智能·aigc
速易达网络6 分钟前
Trae智能体SOLO中国版
人工智能·trae
会飞的胖达喵6 分钟前
Qt自动信号槽连接机制:深入解析与应用实践
开发语言·qt
橙汁味的风7 分钟前
2EM算法详解
人工智能·算法·机器学习
永霖光电_UVLED7 分钟前
日本 Novel Crystal 突破10kV障碍
人工智能
无奈笑天下8 分钟前
银河麒麟V10虚拟机安装vmtools报错:/bin/bash解释器错误, 权限不够
linux·运维·服务器·开发语言·经验分享·bash
superman超哥11 分钟前
仓颉动态特性探索:反射API的原理、实战与性能权衡
开发语言·后端·仓颉编程语言·仓颉·仓颉语言·仓颉动态特性·反射api
小鸡吃米…12 分钟前
带Python的人工智能——计算机视觉
人工智能·python·计算机视觉
程序员阿鹏17 分钟前
@Autowired和@Resource的区别
java·开发语言·spring
Halo_tjn19 分钟前
Java List集合知识点
java·开发语言·windows·算法·list