返回

Python 学习笔记 13:深入理解类、继承和异常处理

见解分享

Python 面向对象编程:理解类、继承和异常处理

Python 的面向对象编程 (OOP) 范式提供了创建灵活、可重用且模块化代码的强大功能。通过定义类并创建它们的实例(称为对象),我们可以利用 OOP 的核心概念,例如继承、多态和异常处理,来构建复杂且维护良好的 Python 应用程序。

类、对象和属性

类是用户定义的数据类型,充当蓝图来创建具有相同特征和行为的对象。它们使用 class 定义,包含属性(特征)和方法(行为)。

要创建类的实例,我们使用类名后跟一对括号:

class Student:
    name = ""
    age = 0

student1 = Student()
student1.name = "John Doe"
student1.age = 21

在这里,Student 类定义了两个属性,nameage,对象 student1 是该类的实例,我们可以访问和修改其属性。

继承和多态

继承允许一个类(子类)从另一个类(父类)继承属性和方法。这有助于代码重用和创建层次结构:

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

class Rectangle(Shape):
    def get_area(self):
        return self.length * self.width

class Square(Shape):
    def __init__(self, side):
        super().__init__(side, side)

    def get_area(self):
        return self.length ** 2

在这个示例中,RectangleSquare 子类继承了 Shape 类的属性和 __init__ 方法。Rectangle 类覆盖了 get_area 方法,而 Square 类重用了它并提供了自己的 __init__ 方法。

多态允许我们以统一的方式处理子类的对象。例如,我们可以创建所有形状类型的列表并调用 get_area 方法,尽管每个子类实现的方式不同。

包、模块和导入

包是一个包含多个模块的集合,模块是 Python 中可重用的代码块。导入包或模块允许我们在自己的代码中使用它们的函数和类:

import my_package.my_module

# 或

from my_package import my_module

异常处理

异常是运行时发生的错误。Python 中,我们可以使用 try...except 语句来优雅地处理异常:

try:
    result = 10 / 0
except ZeroDivisionError:
    print("Division by zero is not allowed.")

这样,当 result = 10 / 0 语句引发 ZeroDivisionError 异常时,程序不会崩溃,而是会打印一条有意义的错误消息。

练习

练习 1:创建学生类

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

    def get_info(self):
        return f"Name: {self.name}, Age: {self.age}"

练习 2:创建矩形和正方形类

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

    def get_area(self):
        return self.length * self.width

class Square(Rectangle):
    def __init__(self, side):
        super().__init__(side, side)

练习 3:处理异常

try:
    number = int(input("Enter a number: "))
    result = 10 / number
except ValueError:
    print("Invalid input. Please enter an integer.")
except ZeroDivisionError:
    print("Division by zero is not allowed.")

常见问题解答

  1. 什么是类的主要优点?
    类封装了数据和行为,提高了代码的可重用性、可维护性和模块化。

  2. 继承和组合有什么区别?
    继承创建父子类关系,而组合允许类使用其他类作为属性。

  3. 异常处理有什么好处?
    它使我们能够优雅地处理错误,防止程序崩溃并提供有意义的错误消息。

  4. 如何调试 Python 程序中的异常?
    使用 pdb 调试器或启用 Python 解释器的 -d 选项以逐步调试代码并检查变量。

  5. Python OOP 中多态性的一个实际示例是什么?
    多态性允许我们使用不同的子类对象来调用相同的方法,例如不同的形状计算它们的面积。