Python面向对象编程学习笔记
一、两大编程思想对比
对比维度 | 面向过程 | 面向对象 |
---|---|---|
核心思想 | 功能上的封装(函数为核心) | 属性和行为的封装(对象为核心) |
典型语言 | C语言 | Python、Java |
代码组织方式 | 按步骤拆解任务(线性思维) | 以对象为单位组织代码(模块化思维) |
适用场景 | 简单逻辑、小型项目 | 复杂系统、团队协作开发 |
代码复用性 | 低(函数级复用) | 高(通过继承、组合复用) |
二、类和对象基础
-
概念
• 类(Class):抽象模板(如"汽车设计图")
• 对象(Object):类的具体实例(如"一辆宝马汽车") -
自定义类与创建对象
class Student:
# 类属性(所有对象共享)
school = "清华大学"
# 初始化方法(构造函数)
def __init__(self, name, age):
# 实例属性(每个对象独立)
self.name = name
self.age = age
# 实例方法(操作对象数据)
def study(self):
print(f"{self.name}正在学习")
# 创建对象
stu1 = Student("张三", 20)
stu2 = Student("李四", 22)
三、类的组成
成员类型 | 定义方式 | 访问方式 | 特点 |
---|---|---|---|
类属性 | 直接定义在类内部 | 类名.属性名 | 所有对象共享 |
实例属性 | 通过self.属性名 定义 | 对象.属性名 | 每个对象独立 |
实例方法 | def method(self): ... | 对象.method() | 操作实例属性 |
静态方法 | @staticmethod 装饰器 | 类名.method() | 无需访问类/实例属性 |
类方法 | @classmethod 装饰器 | 类名.method() | 操作类属性,第一个参数是cls |
示例代码:
class Calculator:
# 类属性
PI = 3.14159
@classmethod
def circle_area(cls, r):
return cls.PI * r ** 2 # 操作类属性
@staticmethod
def add(a, b):
return a + b # 与类无关的工具方法
四、动态绑定属性和方法
Python允许为特定对象单独添加属性和方法(不影响其他对象):
# 动态添加属性
stu1.gender = "男"
# 动态绑定方法
import types
def show_info(self):
print(f"Name: {self.name}, Age: {self.age}")
stu1.show = types.MethodType(show_info, stu1)
stu1.show()
五、面向对象三大特征
-
封装
• 隐藏对象内部实现细节,通过公共接口访问
• Python实现:使用单下划线_属性名
约定私有属性 -
继承
• 子类继承父类属性和方法,实现代码复用
• Python支持多继承
class Animal:
def eat(self):
print("吃东西")
class Dog(Animal):
def bark(self):
print("汪汪叫")
- 多态
• 相同方法名在不同类中有不同实现
• Python通过"鸭子类型"实现(关注行为而非类型)
class Cat:
def speak(self):
print("喵喵")
class Duck:
def speak(self):
print("嘎嘎")
def animal_speak(obj):
obj.speak() # 只要对象有speak()方法即可
学习建议
- 多练习自定义类创建对象
- 理解不同方法类型的适用场景
- 尝试实现简单的类继承体系
- 通过实际项目体会三大特征的作用