Python导入时执行多少操作算过度?当前状态集合实现是否最优?
问题解答
当前实现是否符合Python风格?
完全符合。你之前遇到的导入时调用REST接口的问题,属于有副作用的危险操作——这类操作依赖外部服务、修改全局状态或产生IO,才是Python风格里需要避免的。而你创建completed_statuses集合只是基于枚举成员做简单的内存集合初始化,没有任何外部依赖或副作用,属于常规且安全的写法,完全没问题。
更优方案推荐
如果想把已完成状态的逻辑和枚举类更内聚,推荐把集合作为枚举类的类属性,这样代码逻辑更集中,维护起来更方便:
from enum import Enum, auto class Status(Enum): PENDING = auto() FINISHED = auto() FAILED = auto() # 直接定义类属性,导入时初始化,无副作用 COMPLETED_STATUSES = {FINISHED, FAILED}
如果后续需要动态调整已完成状态的定义,也可以用类方法配合缓存,避免重复创建集合:
from enum import Enum, auto from functools import lru_cache class Status(Enum): PENDING = auto() FINISHED = auto() FAILED = auto() @classmethod @lru_cache(maxsize=None) def get_completed_statuses(cls): return {cls.FINISHED, cls.FAILED}
但对于你这种固定的已完成状态集合,直接用类属性的方式最简洁高效,完全不需要过度顾虑导入时的初始化——毕竟这只是在内存里创建几个枚举成员的集合,没有任何风险。
内容的提问来源于stack exchange,提问作者nanotek
相关产品推荐
相关产品推荐

