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

你好呀,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()  # 输出:珍珠奶茶加冰完成!

类方法:管理整个奶茶品类

@classmethod
def change_category(cls, new_category):
    cls.category = new_category

MilkTea.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. 咖啡品类(美式、拿铁)

  2. 自定义糖度、温度

  3. 计算总价的方法

私信我,获取「咖啡店订单系统」代码。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

信息科技云课堂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值