Python 枚举

枚举适用于值的范围固定且有限的场景,核心价值是:

  • 限制输入,避免无效值;
  • 增强可读性,减少硬编码;
  • 配合类型提示,提升开发效率。

在实际开发中,枚举常用于状态码、类型标识、选项列表等场景,是替代字符串 / 数字硬编码的最佳实践之一。

# 导入抽象基类模块,用于定义抽象类和抽象方法
from abc import ABC, abstractmethod
# 导入枚举模块,用于限制动物类型的可选值
from enum import Enum


class AnimalType(Enum):
    """
    动物类型枚举类,明确限定工厂可创建的动物类型
    避免直接使用字符串传参导致的拼写错误或无效值
    """
    # 枚举成员:键为常量名,值为对应的字符串标识
    CAT = "cat"  # 猫类型
    DOG = "dog"  # 狗类型


class Animal(ABC):
    """
    动物抽象基类(ABC),定义所有动物的通用接口
    作为所有具体动物类的父类,强制子类实现speak方法
    """
    @abstractmethod
    def speak(self):
        """
        抽象方法:动物发出叫声的接口
        子类必须实现该方法,返回对应动物的叫声字符串
        """
        pass


class Dog(Animal):
    """
    狗类,继承自动物抽象基类
    实现狗的具体叫声逻辑
    """
    def speak(self):
        """返回狗的叫声"Woof!"(汪汪)"""
        return "Woof!"


class Cat(Animal):
    """
    猫类,继承自动物抽象基类
    实现猫的具体叫声逻辑
    """
    def speak(self):
        """返回猫的叫声"Meow!"(喵喵)"""
        return "Meow!"


class AnimalFactory:
    """
    动物工厂类,使用简单工厂模式创建动物实例
    封装对象创建逻辑,根据输入的动物类型返回对应实例
    """
    @staticmethod
    def create(animal_type: AnimalType):
        """
        静态工厂方法:根据动物类型枚举创建对应动物实例
        :param animal_type: 动物类型枚举(AnimalType),只能是CAT或DOG
        :return: 对应动物类型的实例(Dog或Cat)
        :raises ValueError: 若传入未定义的枚举值(理论上因枚举限制不会触发)
        """
        # 根据枚举值判断需要创建的动物类型
        if animal_type == AnimalType.DOG:
            return Dog()  # 创建狗实例
        elif animal_type == AnimalType.CAT:
            return Cat()  # 创建猫实例
        else:
            # 异常处理:应对枚举扩展后未更新工厂的情况
            raise ValueError(f"不支持的动物类型: {animal_type}")

if __name__ == '__main__':
    # -------------- 使用示例 --------------
    # 创建狗实例并调用叫声方法
    dog = AnimalFactory.create(AnimalType.DOG)
    print(dog.speak())  # 输出:Woof!

    # 创建猫实例并调用叫声方法
    cat = AnimalFactory.create(AnimalType.CAT)
    print(cat.speak())  # 输出:Meow!

优化点说明:

  1. 枚举限制输入:通过AnimalType枚举,明确限定可选值只能是CATDOG,避免传入无效字符串(如 "bird"、"pig" 等)。
  2. 类型提示create方法的参数类型被标注为AnimalType,IDE 会自动提示可选值,减少开发错误。
  3. 可读性提升:使用枚举比直接传字符串更清晰,代码意图更明确。

如果尝试传入枚举外的值(如AnimalFactory.create("dog")),会直接触发类型错误,提前暴露问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值