01_Python面向对象编程基础

目录

一、面向对象编程思想

1.1 两种编程范式

1.2 面向对象的优势

二、类与对象:万物皆对象

2.1 核心概念

2.2 定义类与创建对象

2.3 self关键字的秘密

三、属性操作:对象的特征管理

3.1 添加与访问属性

3.2 初始化属性:__init__()魔法方法

四、魔法方法:Python的黑魔法

4.1 __str__():对象的人类可读表示

4.2 __del__():对象销毁时的清理

魔法方法总结表

五、综合实战案例

5.1 案例一:减肥追踪器

六、面向对象编程最佳实践


一、面向对象编程思想

1.1 两种编程范式

  • ​面向过程​​:关注"如何做"的步骤化思维(如:第一步打开冰箱,第二步放入大象)
  • ​面向对象​​:关注"谁来做"的对象化思维(如:冰箱.开门(),大象.进入())

​核心区别​​:

  • 面向过程是解决问题的"步骤说明书"
  • 面向对象是模拟现实世界的"对象交互模型"

生活案例:洗衣服

  • 面向过程:拿盆→加水→放衣服→搓洗→晾干
  • 面向对象:人.操作(洗衣机),洗衣机.清洗(衣服)

1.2 面向对象的优势

  • 更贴近人类思维模式
  • 提高代码复用性和可维护性
  • 便于构建复杂系统
  • 支持模块化开发

二、类与对象:万物皆对象

2.1 核心概念

概念说明现实比喻
​类​抽象模板/蓝图汽车设计图纸
​对象​类的具体实例根据图纸造的汽车
​属性​对象的特征(名词)颜色、型号
​方法​对象的行为(动词)加速、刹车

2.2 定义类与创建对象

# 定义汽车类
class Car:
    # 方法:定义对象行为
    def run(self):
        print("汽车正在行驶...")

# 创建对象实例
my_car = Car()
my_car.run()  # 调用方法

2.3 self关键字的秘密

  • self指向当前对象实例
  • 用于区分不同对象的属性和方法
  • 在类内部访问成员时必须使用
  • 一个类可以实例化多个对象,用于区分哪个对象调用了类的方法

class Car:
    def start_engine(self):
        print("引擎启动")
        self.drive()  # 通过self调用其他方法
    
    def drive(self):
        print("汽车行驶中")

三、属性操作:对象的特征管理

3.1 添加与访问属性

# 类外部添加属性
my_car.color = "红色"
my_car.wheels = 4

# 类内部访问属性
class Car:
    def show_info(self):
        print(f"颜色: {self.color}, 轮胎数: {self.wheels}")

3.2 初始化属性:__init__()魔法方法

  • 创建对象时自动调用
  • 用于初始化对象属性
  • 支持参数化初始化
class Car:
    def __init__(self, color, wheels):
        self.color = color  # 初始化颜色属性
        self.wheels = wheels  # 初始化轮胎属性
        
    def show_info(self):
        print(f"一辆{self.color}的汽车,有{self.wheels}个轮胎")

# 创建对象时初始化属性
my_car = Car("蓝色", 4)
my_car.show_info()

四、魔法方法:Python的黑魔法

        在python中,有一类方法是用来对python类的功能进行加强(扩展)操作的,并且这一类方法不需要手动触发(自动触发)

4.1 __str__():对象的人类可读表示

        __str__():用于快速打印对象的各个属性值的,在输出语句打印对象时会自动执行

class Car:
    def __init__(self, color, wheels):
        self.color = color
        self.wheels = wheels
        
    def __str__(self):
        return f"Car: {self.color}, {self.wheels}轮"

my_car = Car("黑色", 4)
print(my_car)  # 输出: Car: 黑色, 4轮

4.2 __del__():对象销毁时的清理

        __del__():当对象被删除或者文件执行结束完毕后,会自动的调用

class Car:
    def __del__(self):
        print("汽车对象已被销毁")
        
# 使用示例
car = Car()
del car  # 输出: 汽车对象已被销毁

魔法方法总结表

方法触发时机常用场景
__init__()创建对象时属性初始化
__str__()print()或str()调用时返回可读的对象描述
__del__()对象销毁时资源释放、清理操作

五、综合实战案例

5.1 案例一:减肥追踪器

class Person:
    def __init__(self, name, initial_weight):
        self.name = name
        self.weight = initial_weight
        
    def run(self):
        self.weight -= 0.5
        print(f"{self.name}跑步一次,体重减至{self.weight}kg")
    
    def eat(self):
        self.weight += 2
        print(f"{self.name}大吃一顿,体重增至{self.weight}kg")
    
    def __str__(self):
        return f"{self.name}当前体重: {self.weight}kg"

# 使用示例
xiaoming = Person("小明", 100)
print(xiaoming)  # 小明当前体重: 100kg

xiaoming.run()   # 小明跑步一次,体重减至99.5kg
xiaoming.eat()   # 小明大吃一顿,体重增至101.5kg

 5.2 案例二:烤地瓜模拟器

class SweetPotato:
    def __init__(self):
        self.cook_time = 0
        self.state = "生的"
        self.condiments = []
    
    def cook(self, minutes):
        self.cook_time += minutes
        
        if self.cook_time < 3:
            self.state = "生的"
        elif self.cook_time < 5:
            self.state = "半生不熟"
        elif self.cook_time < 8:
            self.state = "熟了"
        else:
            self.state = "烤糊了"
        
        print(f"烤了{minutes}分钟,当前状态: {self.state}")
    
    def add_condiment(self, name):
        self.condiments.append(name)
        print(f"添加调料: {name}")
    
    def __str__(self):
        return f"地瓜状态: {self.state}, 总时长: {self.cook_time}分钟, 调料: {', '.join(self.condiments)}"

# 使用示例
potato = SweetPotato()
print(potato)  # 地瓜状态: 生的, 总时长: 0分钟, 调料: 

potato.cook(2)  # 烤了2分钟,当前状态: 生的
potato.cook(3)  # 烤了3分钟,当前状态: 半生不熟
potato.add_condiment("辣椒粉")
potato.add_condiment("孜然")

print(potato)  # 地瓜状态: 半生不熟, 总时长: 5分钟, 调料: 辣椒粉, 孜然

六、面向对象编程最佳实践

  1. ​单一职责原则​​:每个类只负责一项功能
  2. ​合理使用初始化​​:在__init__中设置必要属性
  3. ​封装数据​​:通过方法操作属性,而非直接访问
  4. ​利用魔法方法​​:增强类的表现力和功能性
  5. ​命名规范​​:类名使用大驼峰,方法使用小写蛇形

"面向对象不是万能的,但没有面向对象是万万不能的"

  • 在构建复杂系统、GUI程序、游戏开发时,面向对象会展现出强大威力
  • 对于简单脚本,面向过程可能更直接高效

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值