Python 学习笔记 13:深入理解类、继承和异常处理
2023-12-14 03:29:27
Python 面向对象编程:理解类、继承和异常处理
Python 的面向对象编程 (OOP) 范式提供了创建灵活、可重用且模块化代码的强大功能。通过定义类并创建它们的实例(称为对象),我们可以利用 OOP 的核心概念,例如继承、多态和异常处理,来构建复杂且维护良好的 Python 应用程序。
类、对象和属性
类是用户定义的数据类型,充当蓝图来创建具有相同特征和行为的对象。它们使用 class
定义,包含属性(特征)和方法(行为)。
要创建类的实例,我们使用类名后跟一对括号:
class Student:
name = ""
age = 0
student1 = Student()
student1.name = "John Doe"
student1.age = 21
在这里,Student
类定义了两个属性,name
和 age
,对象 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
在这个示例中,Rectangle
和 Square
子类继承了 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.")
常见问题解答
-
什么是类的主要优点?
类封装了数据和行为,提高了代码的可重用性、可维护性和模块化。 -
继承和组合有什么区别?
继承创建父子类关系,而组合允许类使用其他类作为属性。 -
异常处理有什么好处?
它使我们能够优雅地处理错误,防止程序崩溃并提供有意义的错误消息。 -
如何调试 Python 程序中的异常?
使用pdb
调试器或启用 Python 解释器的-d
选项以逐步调试代码并检查变量。 -
Python OOP 中多态性的一个实际示例是什么?
多态性允许我们使用不同的子类对象来调用相同的方法,例如不同的形状计算它们的面积。