首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
第 13章 性能测量和大O算法分析
13.1 timeit模块
13.2 cProfile分析器
13.3 大O算法分析
13.4 大O阶
13.4.1 使用书架打比方描述大O阶
13.4.2 大O 测量的是最坏情况
13.5 确定代码的大O 阶
13.5.1 为什么低阶项和系数不重要
13.5.2 大O 分析实例
13.5.3 常见函数调用的大O 阶
13.5.4 一眼看出大O 阶
13.5.5 当n 很小时,大O并不重要,而n通常都很小
第 14章 项目实战
14.1 汉诺塔
14.1.1 汉诺塔输出
14.1.2 汉诺塔源代码
14.1.3 汉诺塔编写代码
14.2 四子棋
14.2.1 四子棋输出
14.2.2 四子棋源代码
14.2.3 四子棋编写代码
第 15章 面向对象编程和类
15.1 拿现实世界打比方:填写表格
15.2 基于类创建对象
15.3 创建一个简单的类——WizCoin
15.3.1 方法__init__()和self
15.3.2 特性
15.3.3 私有特性和私有方法
15.4 函数type()和特性__qualname__
15.5 非OOP 和OOP 的例子:井字棋
15.6 为现实世界设计类是一件难事儿
第 16章 面向对象编程和继承
16.1 继承的原理
16.1.1 重写方法
16.1.2 super()函数
16.1.3 倾向于组合而非继承
16.1.4 继承的缺点
16.2 函数isinstance()和issubclass()
16.3 类方法
16.4 类特性
16.5 静态方法
16.6 何时应该使用类和静态的面向对象特性
16.7 面向对象的行话
16.7.1 封装
16.7.2 多态性
16.8 何时不应该使用继承
16.9 多重继承
16.10 方法解析顺序
第 17章 Python 风格的面向对象编程:属性和魔术方法
17.1 属性
17.1.1 将特性转换为属性
17.1.2 使用setter 验证数据
17.1.3 只读属性
17.1.4 什么时候应该使用属性
17.2 Python 的魔术方法
17.2.1 字符串表示魔术方法
17.2.2 数值魔术方法
17.2.3 反射数值魔术方法
17.2.4 原地魔术方法
17.2.5 比较魔术方法
当前位置:
首页>>
技术小册>>
Python编程轻松进阶(五)
小册名称:Python编程轻松进阶(五)
### 第16章 面向对象编程和继承 #### 引言 在Python编程的广阔天地中,面向对象编程(Object-Oriented Programming, OOP)是一种极为重要且强大的编程范式。它允许我们以更加贴近现实世界的思维方式来设计和构建软件系统,通过定义类(Class)来模拟现实世界的实体(对象),以及这些实体之间的相互作用。本章将深入探讨Python中的面向对象编程基础,特别是类的定义、对象的创建、方法的使用,以及继承机制,帮助读者实现从初学者到进阶者的跨越。 #### 1. 面向对象编程基础 ##### 1.1 类与对象 在面向对象编程中,**类**(Class)是创建对象的蓝图或模板,它定义了对象的属性(数据)和方法(函数)。**对象**(Object)则是根据类创建的具体实例,具有类所定义的属性和方法。 ```python class Person: def __init__(self, name, age): self.name = name self.age = age def greet(self): print(f"Hello, my name is {self.name} and I am {self.age} years old.") # 创建Person类的实例(对象) person1 = Person("Alice", 30) person1.greet() # 调用对象的方法 ``` ##### 1.2 类的属性与方法 - **属性**:用于存储对象的数据,如上面的`name`和`age`。 - **方法**:定义在类中的函数,用于执行特定操作。方法至少有一个特殊参数`self`,指向类的实例本身,用于访问类的属性和其他方法。 ##### 1.3 构造函数与析构函数 - **构造函数**(`__init__`方法):在创建对象时自动调用,用于初始化对象的属性。 - **析构函数**(`__del__`方法):在对象被销毁时自动调用,用于执行清理工作,但Python的垃圾回收机制使得析构函数的显式使用较少。 #### 2. 继承 继承是面向对象编程中的一个核心概念,它允许我们定义一个类(子类或派生类)来继承另一个类(父类或基类)的属性和方法。这样做的好处包括代码重用、增强可扩展性和维护性。 ##### 2.1 定义子类 通过`class SubClass(BaseClass):`语法来定义子类,其中`SubClass`是子类名,`BaseClass`是父类名。 ```python class Student(Person): def __init__(self, name, age, student_id): super().__init__(name, age) # 调用父类的构造函数 self.student_id = student_id def show_student_info(self): print(f"Student ID: {self.student_id}, Name: {self.name}, Age: {self.age}") # 创建Student类的实例 student1 = Student("Bob", 22, "S001") student1.show_student_info() student1.greet() # 继承自Person类的方法 ``` ##### 2.2 方法覆盖(Override) 子类可以定义与父类同名的方法,从而覆盖父类的方法。这允许子类根据需要修改或扩展父类的行为。 ```python class GraduateStudent(Student): def greet(self): print(f"Hello, my name is {self.name}. I am a graduate student.") grad_student = GraduateStudent("Charlie", 25, "G001") grad_student.greet() # 调用的是GraduateStudent类中的greet方法 ``` ##### 2.3 访问控制与封装 - **私有属性**和**私有方法**:在Python中,通过在属性名或方法名前加双下划线(`__`)可以将其标记为私有,但这实际上是通过名称改写(name mangling)来实现的,并不提供真正的访问控制。约定俗成地,我们应避免直接访问或修改私有成员。 - **封装**:将对象的属性和方法结合成一个独立的单元,隐藏对象的内部实现细节,仅对外公开有限的接口(即公有方法和属性)。 #### 3. 继承中的多态性 多态性(Polymorphism)允许我们以统一的接口处理不同类型的对象。在继承关系中,如果子类重写了父类的方法,并且这些方法在父类中被用作接口(即被其他方法或类调用),那么当父类类型的引用指向子类对象时,将调用子类的方法,这就是多态的体现。 ```python def greet_person(person): person.greet() greet_person(person1) # 调用Person类的greet方法 greet_person(grad_student) # 调用GraduateStudent类的greet方法,展示了多态性 ``` #### 4. 继承的进阶概念 ##### 4.1 多重继承 Python支持多重继承,即一个子类可以继承多个父类。这增加了类的灵活性,但也带来了潜在的复杂性,如方法解析顺序(Method Resolution Order, MRO)问题。 ```python class Employee: def show_role(self): print("I am an employee.") class Manager(Person, Employee): def show_role(self): super().show_role() # 可能调用Person或Employee的show_role,取决于MRO print("I am also a manager.") # 多重继承的使用需谨慎 ``` ##### 4.2 抽象基类(ABC) Python的`abc`模块提供了抽象基类(Abstract Base Classes, ABCs)的支持,允许我们定义一些抽象方法,这些方法在子类中必须被实现。这有助于定义接口的框架,确保子类遵循特定的协议。 ```python from abc import ABC, abstractmethod class Shape(ABC): @abstractmethod def area(self): pass class Circle(Shape): def __init__(self, radius): self.radius = radius def area(self): return 3.14 * self.radius ** 2 # Circle类必须实现Shape类中定义的area方法 ``` #### 结语 本章通过详细的实例和解释,介绍了Python中面向对象编程的基本概念,包括类与对象的创建、属性的定义与访问、方法的覆盖与继承、多态性的实现,以及多重继承和抽象基类的进阶应用。掌握这些概念将使你的Python编程能力迈上一个新的台阶,更加灵活地应对复杂的编程任务。面向对象编程不仅提高了代码的可读性和可维护性,还促进了代码的重用和模块化设计,是现代软件开发不可或缺的一部分。
上一篇:
15.6 为现实世界设计类是一件难事儿
下一篇:
16.1 继承的原理
该分类下的相关小册推荐:
Python合辑9-判断和循环
Python合辑13-面向对象编程案例(上)
Python合辑12-面向对象
Python数据分析与挖掘实战(下)
机器学习算法原理与实战
Python合辑11-闭包函数
Python数据分析与挖掘实战(上)
Python与办公-玩转Word
Python神经网络入门与实践
Python合辑4-130个字符串操作示例
Python编程轻松进阶(一)
Python机器学习基础教程(下)