Python核心编程详解:函数参数、类继承与装饰器
Python核心编程详解:函数参数、类继承与装饰器
1 函数参数传递机制
Python函数参数传递采用的是”传对象引用”的方式,具体表现根据传递的对象类型而有所不同。
1.1 可变对象与不可变对象的影响
不可变对象(数字、字符串、元组)在函数内部修改时不会影响外部变量:
1 | def test_int(param): |
可变对象(列表、字典)在函数内部修改时会直接影响外部变量:
1 | def test_list(param_list): |
1.2 参数传递方式详解
1.2.1 位置参数传递
按照参数定义顺序进行传递:
1 | def introduce(name, age, city): |
1.2.2 关键字参数传递
通过参数名指定值,顺序可以任意:
1 | introduce(age=25, city="北京", name="张三") # 顺序可打乱 |
1.2.3 默认参数传递
为参数设置默认值,调用时可省略:
1 | def introduce(name, age=30, city="北京"): # 默认参数必须在后 |
1.2.4 可变参数传递
使用*args和**kwargs接收不定数量参数:
1 | # 包裹传递 |
2 类继承关系构建
2.1 基本继承语法
Python通过括号表示继承关系:
1 | class Animal: # 父类/基类 |
2.2 多重继承与方法解析顺序(MRO)
Python支持一个类继承多个父类:
1 | class Flyable: |
2.3 继承中的访问控制
Python通过命名约定实现访问控制:
1 | class BankAccount: |
3 装饰器原理及实际应用
3.1 装饰器基本原理
装饰器本质上是高阶函数,接受一个函数作为参数并返回一个新函数:
1 | def simple_decorator(func): |
3.2 实用装饰器示例
3.2.1 计时装饰器
测量函数执行时间:
1 | import time |
3.2.2 缓存装饰器
避免重复计算:
1 | def cache(func): |
关键特性:独立性
每个被 @cache 装饰的函数,都会拥有 独立的
cached_results 字典。
3.2.3 权限验证装饰器
控制函数访问权限:
1 | def require_login(func): |
3.3 带参数的装饰器
创建可配置的装饰器:
1 | def repeat(n): |
4 完整面向对象编程案例:图形绘制系统
结合参数传递、类继承和装饰器的完整示例:
1 | import math |
这个完整案例展示了: 1. 函数参数传递:使用关键字参数、默认参数等不同方式 2. 类继承关系:抽象基类、单继承、多重继承 3. 装饰器应用:性能监控装饰器 4. 面向对象特性:封装、继承、多态
核心组件说明:
ABC:是一个特殊的基类(Abstract Base Class 的缩写),所有自定义的抽象基类都需要继承它。它的作用是标记一个类为 “抽象类”,使其无法被直接实例化,只能作为父类被继承。abstractmethod:是一个装饰器,用于标记抽象类中的 “抽象方法”。被该装饰器标记的方法必须在子类中被重写实现,否则子类仍然是抽象类,无法被实例化。
通过这个教程,你应该对Python函数参数传递、类继承和装饰器有了深入的理解。这些概念是Python面向对象编程的核心,掌握它们将大大提高你的编程能力。