DAY 29 复习日
知识点回顾
1. 类的装饰器
2. 装饰器思想的进一步理解:外部修改、动态
3. 类方法的定义:内部定义和外部定义
作业:复习类和函数的知识点,写下自己过去29天的学习心得,如对函数和类的理解,对python这门工具的理解等,未来再过几个专题部分我们即将开启深度学习部分。
函数
一、函数定义的基本语法
def 函数名(参数列表):
"""文档字符串(可选):说明函数的功能、参数、返回值等"""
# 函数体:具体执行的代码逻辑
语句1
语句2
...
[return 返回值] # 可选,无返回值时默认返回 None
二、函数框架的核心组成部分
1. 函数名
- 作用:标识函数,需符合 Python 变量命名规则(字母、数字、下划线,不能以数字开头,区分大小写)。
- 规范:见名知意,通常用小写字母和下划线组合(如
calculate_sum
、parse_data
)。
2. 参数列表
-
作用:接收调用者传递的数据,分为以下几类:
- 必选参数:调用时必须传递的参数(位置参数)。
- 默认参数:有默认值的参数,调用时可省略。
- 可变参数:
*args
:接收任意数量的 位置参数,存储为元组。**kwargs
:接收任意数量的 关键字参数,存储为字典。
- 仅限关键字参数:参数列表中
*
之后的参数,必须通过关键字传递。
参数顺序:
def func(必选参数, 默认参数=默认值, *args, 仅限关键字参数, **kwargs):
pass
装饰器(修改函数行为)
def decorator(func):
def wrapper():
print("前置逻辑")
func()
print("后置逻辑")
return wrapper
@decorator # 等价于 hello = decorator(hello)
def hello():
print("Hello, World!")
hello() # 调用时执行:前置逻辑 → 函数本体 → 后置逻辑
装饰器的执行时机
- 装饰器在类或函数定义时立即执行,而非调用时。例如
def decorator(cls):
print("装饰器执行!")
return cls
@decorator
class MyClass: pass # 输出:装饰器执行!(定义时执行)
类与对象
1. 面向对象编程(OOP)基础
- 类(Class):定义对象的模板,包含属性(数据)和方法(行为)。
- 对象(Object):类的实例,通过实例化类创建(如
obj = ClassName()
)。 - 三大特性:
- 封装:将数据和方法包装在类中,通过
self
访问实例属性。 - 继承:子类继承父类的属性和方法(如
class Child(Parent):
),支持多继承。 - 多态:不同子类对象对同一方法有不同实现(如鸭子类型)。
- 封装:将数据和方法包装在类中,通过
2. 类的核心组成
- 构造方法:
__init__(self, ...)
,用于初始化实例属性。 - 实例方法:默认第一个参数为
self
,操作实例属性(如def method(self):
)。 - 类方法:用
@classmethod
装饰,第一个参数为cls
,操作类属性(如@classmethod def class_method(cls):
)。 - 静态方法:用
@staticmethod
装饰,无默认参数,与类 / 实例无关(如@staticmethod def static_method():
)。 - 属性(Property):用
@property
装饰,将方法伪装成属性调用(如只读属性)。
3. 继承与多态
- 单继承:子类继承单个父类:
class Animal:
def speak(self):
raise NotImplementedError # 强制子类实现
class Dog(Animal):
def speak(self): # 重写父类方法
return "Woof"
- 多继承:子类继承多个父类(需注意菱形继承的优先级问题):
class A: pass
class B(A): pass
class C(A): pass
class D(B, C): pass # D 的 MRO 顺序为 D -> B -> C -> A -> object