Python开发中如何仅初始化两个实例对象中的一个?有什么实现方案?
实现方案
你可以通过类型标识+统一公共逻辑的方式实现按需初始化任意一个对象,同时彻底消除重复代码:
第一步:定义控制变量
通过一个变量指定要初始化的对象类型,后续切换仅需修改该变量值即可:
# 可选值:simulation / reading,按需修改即可切换初始化对象 TARGET_TYPE = "simulation"
第二步:统一初始化逻辑
通过判断控制变量实例化对应对象,后续公共属性赋值、方法调用复用同一段逻辑:
run_container = {} # 实例化对应对象与守护线程 if TARGET_TYPE == "simulation": run_container["obj"] = StartSimulation(client_socket) run_container["thread"] = Thread(target=run_container["obj"].start_simulation, daemon=True) elif TARGET_TYPE == "reading": run_container["obj"] = StartReading(client_socket) run_container["thread"] = Thread(target=run_container["obj"].start_reading, daemon=True) # 统一执行公共操作,无重复逻辑 run_container["obj"].client = client_socket run_container["obj"].send_handler_connect() run_container["obj"].is_connected = True
更易扩展的优化写法
如果后续可能新增更多同类对象,可以提前定义映射表,无需修改分支判断逻辑:
# 预先配置类型映射:键为类型标识,值为(对应类、线程要执行的方法名) TYPE_MAP = { "simulation": (StartSimulation, "start_simulation"), "reading": (StartReading, "start_reading") } TARGET_TYPE = "simulation" run_container = {} # 自动匹配类与方法,实例化对象与线程 target_cls, run_method = TYPE_MAP[TARGET_TYPE] run_container["obj"] = target_cls(client_socket) run_container["thread"] = Thread(target=getattr(run_container["obj"], run_method), daemon=True) # 公共操作逻辑保持不变 run_container["obj"].client = client_socket run_container["obj"].send_handler_connect() run_container["obj"].is_connected = True
后续调用对应对象或线程时,直接访问run_container中的属性即可,不需要再区分两个不同的存储变量。
内容的提问来源于stack exchange,提问作者vzdiogo
相关产品推荐
相关产品推荐

