首页
技术小册
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编程轻松进阶(五)
### 第15章 面向对象编程和类 在Python编程的广阔天地中,面向对象编程(Object-Oriented Programming, OOP)是一种强大的编程范式,它允许开发者以更加直观、模块化和可重用的方式构建复杂的软件系统。本章将深入探讨面向对象编程的基本概念,以及如何在Python中使用类(Class)和对象(Object)来实现这一范式。通过本章的学习,你将能够设计出更加灵活、易于维护和扩展的代码结构。 #### 15.1 面向对象编程简介 面向对象编程的核心思想是将现实世界或问题域中的事物抽象成对象,这些对象之间通过属性和方法(也称为函数)进行交互。OOP的四大基本特性是:封装(Encapsulation)、继承(Inheritance)、多态(Polymorphism)和抽象(Abstraction)。 - **封装**:隐藏对象的内部细节,只暴露必要的接口给外部使用。这有助于保护数据的安全性,并减少外部对内部实现的依赖。 - **继承**:允许创建基于现有类的派生类(子类),子类可以继承父类的属性和方法,并可以添加或覆盖新的属性和方法。这促进了代码的重用。 - **多态**:允许不同类的对象对同一消息做出响应,但具体行为因对象类型而异。这增强了程序的灵活性和可扩展性。 - **抽象**:将复杂的问题分解为简单的抽象概念,通过类来体现这些概念。抽象层次越高,代码的可读性和可维护性越好。 #### 15.2 Python中的类与对象 在Python中,一切皆是对象,包括整数、字符串等内置数据类型。但当我们谈论面向对象编程时,更侧重于用户自定义的类及其实例(对象)。 ##### 15.2.1 定义类 Python中使用`class`关键字来定义类,类名通常使用驼峰命名法(CamelCase)。类定义中可以包含变量(属性)和方法(函数)。 ```python class Dog: def __init__(self, name, age): self.name = name # 实例变量 self.age = age def bark(self): print(f"{self.name} says Woof!") ``` 在这个例子中,`Dog`是一个类,它有两个属性(`name`和`age`)和一个方法(`bark`)。`__init__`是一个特殊的方法,称为构造器(或初始化方法),它会在创建类的新实例时自动调用,用于初始化对象的属性。 ##### 15.2.2 创建对象 创建类的实例(对象)非常简单,只需要使用类名后跟一对圆括号(可以包含传递给构造器的参数),并将结果赋值给一个变量。 ```python my_dog = Dog("Buddy", 3) my_dog.bark() # 输出: Buddy says Woof! ``` 这里,`my_dog`是`Dog`类的一个实例,它继承了`Dog`类定义的所有属性和方法。 #### 15.3 类的继承 继承是面向对象编程中的一个核心概念,它允许我们基于一个已有的类(父类或基类)来定义一个新的类(子类或派生类),子类可以继承父类的属性和方法,同时也可以添加新的属性或覆盖已有的方法。 ```python class GoldenRetriever(Dog): def __init__(self, name, age, color): super().__init__(name, age) # 调用父类的构造器 self.color = color def bark(self): print(f"{self.name} says Woof! Woof! (in a friendly tone)") golden = GoldenRetriever("Max", 4, "golden") golden.bark() # 输出: Max says Woof! Woof! (in a friendly tone) ``` 在这个例子中,`GoldenRetriever`类继承自`Dog`类,并添加了一个新的属性`color`和一个覆盖的`bark`方法。`super().__init__(name, age)`用于调用父类`Dog`的构造器,确保`name`和`age`属性被正确初始化。 #### 15.4 封装与访问控制 封装是隐藏对象内部细节的一种方式,Python没有像Java或C++那样的显式访问控制关键字(如`public`、`private`、`protected`),但它通过命名约定(如单下划线`_`和双下划线`__`前缀)来实现类似的效果。 - **单下划线**:表示这是一个受保护的成员,外部可以访问,但按照约定应该避免直接访问。 - **双下划线**:Python会将这样的属性名进行“名称重整”(name mangling),即在属性名前加上类名(带有下划线前缀)和单下划线,从而避免子类中的属性名冲突。 ```python class Person: def __init__(self, name, age): self._name = name # 受保护的成员 self.__age = age # 私有成员 def get_age(self): return self.__age person = Person("Alice", 30) print(person._name) # 可以访问,但不推荐 print(person.__age) # 会引发AttributeError print(person.get_age()) # 正确的访问私有属性的方式 ``` #### 15.5 多态性 多态性在Python中主要通过方法重写(Override)和接口实现(虽然Python没有显式的接口定义语法,但可以通过抽象基类来模拟)来体现。子类可以重写父类的方法,以提供特定的实现。当父类类型的引用指向子类对象时,调用方法将执行子类中的实现,这就是多态性的体现。 ```python class Animal: def make_sound(self): raise NotImplementedError("Subclass must implement abstract method") class Dog(Animal): def make_sound(self): return "Woof!" class Cat(Animal): def make_sound(self): return "Meow!" def animal_sound(animal): print(animal.make_sound()) dog = Dog() cat = Cat() animal_sound(dog) # 输出: Woof! animal_sound(cat) # 输出: Meow! ``` 在这个例子中,`Animal`类定义了一个抽象方法`make_sound`,该方法在`Dog`和`Cat`子类中得到了具体的实现。`animal_sound`函数接受任何`Animal`类型的对象作为参数,并调用其`make_sound`方法,展示了多态性的应用。 #### 15.6 总结 本章详细介绍了面向对象编程的基本概念,以及如何在Python中通过类和对象来实现这些概念。我们学习了类的定义、对象的创建、继承、封装与访问控制、以及多态性。面向对象编程为开发者提供了一种强大的工具,用于构建模块化、可重用、易于维护和扩展的软件系统。通过实践和应用这些概念,你将能够编写出更加高效、清晰的Python代码。
上一篇:
14.2.3 四子棋编写代码
下一篇:
15.1 拿现实世界打比方:填写表格
该分类下的相关小册推荐:
Python机器学习基础教程(上)
Python合辑7-集合、列表与元组
Python编程轻松进阶(二)
Python甚础Django与爬虫
Python高并发编程与实战
Python合辑9-判断和循环
Python与办公-玩转Word
Python数据分析与挖掘实战(上)
Python高性能编程与实战
Python合辑3-字符串用法深度总结
Python神经网络入门与实践
机器学习算法原理与实战