首页
技术小册
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.2 基于类创建对象 在Python编程的进阶之旅中,掌握面向对象编程(OOP)是一项至关重要的技能。面向对象编程不仅让代码更加模块化、易于理解和维护,还促进了代码的重用和扩展性。在这一章节中,我们将深入探讨如何在Python中基于类(Class)来创建对象(Object),理解这一核心概念对于提升你的编程能力至关重要。 #### 15.2.1 类的基本概念 在Python中,类(Class)是一种用于创建对象的蓝图或模板。它定义了对象应有的属性和方法。属性是对象的特征(如颜色、大小等),而方法是对象能够执行的操作(如移动、计算等)。通过定义类,我们可以指定对象将如何被创建、初始化以及它将支持哪些操作。 #### 15.2.2 定义类 定义一个类通常使用`class`关键字后跟类名和一个冒号。类体由一系列缩进的语句组成,这些语句定义了类的属性和方法。下面是一个简单的类定义示例,用于表示一个汽车(Car)对象: ```python class Car: def __init__(self, brand, model, year): self.brand = brand self.model = model self.year = year def display_info(self): print(f"Brand: {self.brand}, Model: {self.model}, Year: {self.year}") ``` 在这个例子中,`Car`类有三个属性:`brand`、`model`和`year`,这些属性在创建对象时通过`__init__`方法(也称为构造函数或初始化方法)进行初始化。`__init__`方法是一个特殊方法,当创建类的新实例时自动调用。`self`参数是对类实例本身的引用,用于访问类的属性和方法。 #### 15.2.3 创建对象 一旦定义了类,就可以通过类名后跟一对圆括号(可能包含传递给`__init__`方法的参数)来创建对象。例如,创建一个`Car`对象如下: ```python my_car = Car("Toyota", "Corolla", 2020) ``` 这行代码调用了`Car`类的构造函数,并传递了三个参数("Toyota"、"Corolla"和2020),分别用于初始化新创建的`Car`对象的`brand`、`model`和`year`属性。 #### 15.2.4 访问对象的属性和方法 创建对象后,可以使用点(`.`)操作符来访问其属性和方法。例如,访问`my_car`对象的`brand`属性并调用`display_info`方法: ```python print(my_car.brand) # 输出: Toyota my_car.display_info() # 输出: Brand: Toyota, Model: Corolla, Year: 2020 ``` #### 15.2.5 类的特殊方法 除了`__init__`之外,Python类还支持许多其他特殊方法(也称为魔术方法或双下划线方法),这些方法在特定情况下自动调用,用于实现如对象比较、字符串表示、迭代等高级功能。例如: - `__str__`:定义对象的字符串表示形式,当使用`print()`函数或`str()`函数时调用。 - `__eq__`:定义对象之间的等值比较,当使用`==`运算符时调用。 - `__iter__`和`__next__`:定义对象的迭代行为,允许对象用于`for`循环中。 ```python class Car: # ...(省略其他部分) def __str__(self): return f"{self.brand} {self.model} ({self.year})" # 现在print(my_car)将输出: Toyota Corolla (2020) ``` #### 15.2.6 类的继承 面向对象编程的另一个重要特性是继承。继承允许我们定义一个类(子类)来继承另一个类(父类)的属性和方法。子类可以添加新的属性或方法,也可以重写(覆盖)继承自父类的方法。这有助于代码复用和扩展。 ```python class ElectricCar(Car): def __init__(self, brand, model, year, battery_size): super().__init__(brand, model, year) # 调用父类的__init__方法 self.battery_size = battery_size def display_battery_info(self): print(f"Battery Size: {self.battery_size} kWh") # 创建一个ElectricCar对象 my_electric_car = ElectricCar("Tesla", "Model S", 2021, 100) my_electric_car.display_info() # 继承自Car类 my_electric_car.display_battery_info() # ElectricCar类特有的方法 ``` #### 15.2.7 类的封装与私有属性 封装是面向对象编程的一个基本原则,它指的是将数据(属性)和操作数据的函数(方法)捆绑在一起,形成一个独立的单元(即类)。Python没有强制的访问控制机制(如Java中的`private`、`protected`和`public`),但可以通过命名约定来模拟私有属性。 通常,在属性名前加上两个下划线(`__`)来标记为“私有”,尽管这实际上是通过名称改写(name mangling)来实现的,即Python会将这样的属性名改写为包含类名前缀的形式,以避免在子类中出现命名冲突。 ```python class Person: def __init__(self, name, age): self.__name = name # 私有属性 self.age = age def get_name(self): return self.__name # 尝试直接访问私有属性会导致AttributeError # print(person.__name) # 错误 person = Person("Alice", 30) print(person.get_name()) # 正确的方式 ``` #### 15.2.8 总结 基于类创建对象是Python面向对象编程的核心。通过定义类,我们可以创建具有特定属性和方法的对象,这些对象能够模拟现实世界中的实体或概念。掌握类的定义、对象的创建、属性的访问、方法的调用、类的继承、封装以及特殊方法的使用,将极大地提升你的Python编程能力,使你的代码更加灵活、强大和易于维护。希望这一章节的内容能够帮助你更好地理解和应用面向对象编程的概念。
上一篇:
15.1 拿现实世界打比方:填写表格
下一篇:
15.3 创建一个简单的类——WizCoin
该分类下的相关小册推荐:
Python甚础Django与爬虫
Python编程轻松进阶(三)
Python合辑6-字典专题
Python与办公-玩转PPT
Python与办公-玩转Word
Python与办公-玩转Excel
Python编程轻松进阶(一)
Python与办公-玩转PDF
Python3网络爬虫开发实战(下)
Python合辑4-130个字符串操作示例
Python面试指南
Python编程轻松进阶(二)