Skip to content

什么时候该用类,把数据和动作放进同一个对象 ​

对应视频:EP25《什么时候该用类,把数据和动作放进同一个对象》

字典和函数能完成很多任务。真正需要类的信号不是“代码看起来高级”,而是同一类数据不断带着一组相关动作在不同地方出现。

从字典加函数开始 ​

python
customer = {"name": "李雷", "phone": "13800000001", "source": "官网"}

def is_incomplete(item: dict[str, str]) -> bool:
    return not item["name"] or not item["phone"]

字段和动作增加后,调用处会反复传入 customer,每个函数也都要记住同一批字段名。此时可以把共同结构和动作收进类。

python
class Customer:
    def __init__(self, name: str, phone: str, source: str) -> None:
        self.name = name
        self.phone = phone
        self.source = source

    def is_incomplete(self) -> bool:
        return not self.name or not self.phone

    def label(self) -> str:
        return f"{self.name}|{self.source}"


han_meimei = Customer("韩梅梅", "", "展会")
print(han_meimei.is_incomplete())  # True

Customer 是类,描述每位客户共有的结构;han_meimei 是实例,保存自己的属性。self 表示当前正在操作的实例,因此方法可以读取它自己的数据。

类和函数怎么选 ​

情况优先选择示例
一次输入到一次输出的转换函数clean_source(text)
一份数据有状态和多种长期动作类customer.is_incomplete()
多个文件共享单条规则函数或模块checks.is_incomplete(row)

类不会替代函数。先把规则写成函数并确认稳定;当数据和多种动作确实长期绑定,再把它们收进对象。

继续学习 ​

别急,先让缓存热一下。