Python中的类和对象:编程世界的乐高积木

云课堂学Python 2025-03-27 02:48:12
你好呀,Python爱好者!今天我们来聊一个让无数新手“又爱又恨”的话题——类(Class) 和对象(Object)。有人说它们是Python的灵魂,也有人觉得像“天书”… 别慌!这篇用奶茶店点单作比喻,带你轻松吃透核心概念!☕️ 一、类和对象是什么?想象你要开一家奶茶店,店里要有员工、菜单、操作流程。这时候你需要先画一张设计图,写清楚: • 奶茶配方(属性)• 制作步骤(方法) 这就是类(Class)——它就像奶茶店的设计蓝图! 当你按照设计图做出第一杯奶茶时,这杯具体的奶茶就是对象(Object)。你可以做100杯不同口味的奶茶,但它们都来自同一张配方表! 代码示例: class MilkTea: # 类:奶茶设计图 category = "芝士奶盖" # 类属性(所有奶茶都有这个分类) def __init__(self, sugar, topping): self.sugar = sugar # 实例属性:糖度 self.topping = topping # 实例属性:加料# 创建两杯奶茶对象order1 = MilkTea("半糖", "珍珠")order2 = MilkTea("无糖", "椰果")二、类 vs 对象的三大秘密1️⃣ 类属性 vs 实例属性 • 类属性:所有奶茶共享的特征(比如所有芝士奶盖系列都默认有奶盖)• 实例属性:每杯奶茶独有的特征(糖度、加料不同) 举个栗子: print(order1.category) # 输出:芝士奶盖(类属性)print(order1.sugar) # 输出:半糖(实例属性)2️⃣ 方法:让对象动起来! • 实例方法:操作具体奶茶的方法(如搅拌、加冰) def add_ice(self): print(f"{self.topping}奶茶加冰完成!")order1.add_ice() # 输出:珍珠奶茶加冰完成!• 类方法:管理整个奶茶品类 @classmethoddef change_category(cls, new_category): cls.category = new_categoryMilkTea.change_category("水果茶") print(order2.category) # 输出:水果茶(所有实例同步修改!)以上代码需要组合成一个整体,请看文末完整代码。 三、进阶技巧:继承与多态1️⃣ 继承:开一家分店 假设你要开一家水果茶分店,可以直接复用奶茶店的模板,再增加新功能: class FruitTea(MilkTea): # 继承自MilkTea def __init__(self, sugar, fruit_type): super().__init__(sugar, topping=None) # 调用父类方法 self.fruit = fruit_type # 新增属性# 创建一杯芒果冰沙order3 = FruitTea("全糖", "芒果")2️⃣ 多态:万物皆可“做奶茶” 无论基础奶茶还是水果茶,只要实现make()方法,就能统一调用: def factory(tea_type): tea_type.make()# 假设MilkTea和FruitTea都有make()方法factory(order1) # 制作芝士奶盖factory(order3) # 制作芒果冰沙四、封装:保护你的秘方奶茶店的秘方不能随便改!Python用“下划线”实现伪私有: • _secret:暗示“不要随便碰”(但强行改也行)• __recipe:自动变形成_MilkTea__recipe(增加修改难度) 代码示例: class MilkTea: def __init__(self): self._price = 20 # 建议不要直接修改 self.__recipe = "秘方" # 私有属性order = MilkTea()print(order._price) # 20(不推荐)print(order._MilkTea__recipe) # 秘方(强制访问)五、一句话总结类 = 设计图,对象 = 实物属性 = 特征,方法 = 行为继承 = 子承父业,封装 = 保护隐私 # 完整代码class MilkTea: # 类:奶茶设计图 category = "芝士奶盖" # 类属性(所有奶茶都有这个分类) def __init__(self, sugar, topping): self.sugar = sugar # 实例属性:糖度 self.topping = topping # 实例属性:加料 def add_ice(self): print(f"{self.topping}奶茶加冰完成!") @classmethod def change_category(cls, new_category): cls.category = new_category# 创建两杯奶茶对象order1 = MilkTea("半糖", "珍珠")order2 = MilkTea("无糖", "椰果")# 调用属性print(order1.category) # 输出:芝士奶盖print(order2.category) # 输出:芝士奶盖print(order1.sugar) # 输出:半糖print(order1.topping) # 输出:珍珠print(order2.sugar) # 输出:无糖print(order2.topping) # 输出:椰果order1.add_ice() # 输出:珍珠奶茶加冰完成!MilkTea.change_category("水果茶") print(order2.category) # 输出:水果茶(所有实例同步修改!)class FruitTea(MilkTea): # 继承自MilkTea def __init__(self, sugar, fruit_type): super().__init__(sugar, topping=None) # 调用父类方法 self.fruit = fruit_type # 新增属性# 创建一杯芒果冰沙order3 = FruitTea("全糖", "芒果") 动手时间: 试着用类模拟一个「咖啡店订单系统」,包含: 咖啡品类(美式、拿铁)自定义糖度、温度计算总价的方法私信我,获取「咖啡店订单系统」代码。
1 阅读:10