Day 28 训练


Python 类的定义与继承

在学习 Python 的过程中,类是一个重要的概念。今天,我们来深入探讨一下类的定义与继承。

类的复习

相信大家都已经接触过类的概念了,类就像是一个模板,通过对模板实例化可以实现调用这个类的属性和方法。比如说,创建一个随机森林类,我们就可以方便地调用它的训练和预测方法。

定义一个类

现在,我们来学习如何自己定义一个类,这将帮助我们对类这一概念有更深刻的理解。定义一个类通常包括以下几个要素:

  • 关键字 class :用于声明一个类。
  • 类名 :通常遵循大驼峰命名法(UpperCamelCase),即每个单词的首字母都大写。
  • 冒号(: :在类名后面加上冒号表示类的开始。
  • 初始化函数 init(self) :用于初始化类的实例,注意 init 左右各有两个下划线,需要传入 self 这个特殊的参数,它指向类的实例化地址。

下面是一个简单的类定义示例:

class Teacher:
    def __init__(self):
        self.name = "Susan"
        self.subject = "English"
        self.age = 33

Pass 占位符

在定义类或者其他代码结构时,我们有时会先用 pass 占位,避免运行错误。等到想好具体要写什么再去补充代码。例如:

class ClassName:
    pass

在条件语句、循环语句、异常处理语句等依赖缩进的语句中,都可以用 pass 语句来占位。

x = 10
if x > 5:
    pass
else:
    print("x is not greater than 5")

for i in range(3):
    pass

try:
    print("hh")
except SomeError:
    pass
finally:
    pass

初始化方法与普通方法

初始化方法

初始化方法也叫构造方法,它是在创建对象时自动调用的。它用于初始化实例属性。例如:

class Teacher:
    def __init__(self, name, age):
        self.name = name
        self.age = age
        self.subject = "English"

teacher = Teacher("Susan", 33)
print(teacher.name)  # 输出: Susan
print(teacher.age)   # 输出: 33
print(teacher.subject)  # 输出: English

普通方法

普通方法是自己定义的方法,只有在调用类的这个方法的时候,函数才会执行。例如:

class Teacher:
    def __init__(self):
        self.name = "Susan"
        self.subject = "English"
        self.age = 33

    def teach_lesson(self):
        print("上课中")

    def criticize(self):
        print("批评人")

t = Teacher()
t.teach_lesson()  # 上课中
t.criticize()     # 批评人
print(t.name)     # Susan

类的继承

继承是面向对象编程的一个重要特性,它允许一个类(子类)继承另一个类(父类)的属性和方法,从而实现代码复用和功能扩展。

基本概念

子类可以复用父类的代码,也可以重写父类的方法,还可以添加新的方法和属性。例如:

class Teacher:
    def __init__(self, name, subject, age):
        self.name = name
        self.subject = subject
        self.age = age

    def teach_lesson(self):
        print(f"{self.name}正在教{self.subject}。")

    def criticize(self, student_name):
        print(f"{self.name}正在批评{student_name}。")

class MasterTeacher(Teacher):
    def __init__(self, name, subject, age, experience_years):
        super().__init__(name, subject, age)
        self.experience_years = experience_years

    def teach_lesson(self):
        print(f"{self.name}(特级教师)正在用高级方法教授{self.subject}。")

    def give_lecture(self, topic):
        print(f"{self.name}正在举办关于{topic}的讲座。")

master = MasterTeacher("王教授", "数学", 45, 20)
master.teach_lesson()  # 王教授(特级教师)正在用高级方法教授数学。
master.criticize("李同学")  # 王教授正在批评李同学。
master.give_lecture("微积分")  # 王教授正在举办关于微积分的讲座。

super() 函数

super() 是一个内置函数,可以用来调用父类的方法。除了在构造方法中使用,还可以在其他方法中使用。例如:

class Animal:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def speak(self):
        print(f"{self.name} 发出声音")

class Dog(Animal):
    def speak(self):
        super().speak()  # 先调用父类的方法
        print("汪汪叫")    # 再添加子类的行为

dog = Dog("旺财", 3)
dog.speak()

这样,子类就可以在保留父类方法核心逻辑的基础上,进行功能扩展。

通过以上对类的定义与继承的学习,我们对 Python 中的面向对象编程有了更深入的理解。在实际编程中,合理地运用类和继承可以提高代码的可复用性和可维护性。

作业

作业一:

import math

class Circle:
    def __init__(self, radius=1):
        # 初始化圆的半径,默认值为 1
        self.radius = radius

    def calculate_area(self):
        # 计算圆的面积,使用公式 πr²
        return math.pi * self.radius ** 2

    def calculate_circumference(self):
        # 计算圆的周长,使用公式 2πr
        return 2 * math.pi * self.radius

作业二:

class Rectangle:
    def __init__(self, length=1, width=1):
        # 初始化长方形的长和宽
        self.length = length
        self.width = width

    def calculate_area(self):
        # 计算长方形的面积
        return self.length * self.width

    def calculate_perimeter(self):
        # 计算长方形的周长
        return 2 * (self.length + self.width)

    def is_square(self):
        # 判断长方形是否为正方形
        return self.length == self.width

作业三:

import math

class Circle:
    def __init__(self, radius):
        self.radius = radius

    def calculate_circumference(self):
        return math.pi * self.radius ** 2

class Rectangle:
    def __init__(self, length, width):
        self.length = length
        self.width = width

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

def create_shape(shape_type, *args):
    if shape_type == "circle":
        if len(args) != 1:
            raise ValueError("创建圆需要一个参数:半径")
        return Circle(args[0])
    elif shape_type == "rectangle":
        if len(args) != 2:
            raise ValueError("创建长方形需要两个参数:长和宽")
        return Rectangle(*args)
    else:
        raise ValueError(f"不支持的图形类型: {shape_type}")

浙大疏锦行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值