Python中如何显式指定变量为特定类的实例?
类型标注解决方案
你可以直接使用Python原生的类型提示机制解决该问题,Python 3.5及以上版本支持PEP484规范的类型标注,标注后PyCharm等IDE即可正确识别变量类型,提供自动补全能力,同时也大幅提升代码可读性。
针对你的场景,可以修改b.py代码如下:
# 仅Python 3.7及以上版本需要加这行,3.10+默认支持前向引用可省略 from __future__ import annotations from typing import TYPE_CHECKING # 仅静态类型检查时导入SomeC,运行时不会执行该导入,避免循环导入问题 if TYPE_CHECKING: from c import SomeC class SomeB(object): # 给参数标注类型为SomeC def __init__(self, object_c_from_a: SomeC): self.some_var_for_a = 5678 # 也可以给实例变量显式标注类型,可选,参数标注后IDE一般能自动推导 self.object_c_from_a: SomeC = object_c_from_a self.some_work_with_obj_c_data() def some_work_with_obj_c_data(self): # 此时IDE可以正确补全object_c_from_a的所有属性和方法 self.object_c_from_a.some_var_for_b += 1 print(self.object_c_from_a.some_var_for_b)
架构合理性说明
该场景的架构设计不存在问题,属于典型的依赖注入实现思路:由主控类A持有全局唯一的数据处理器C实例,再将C实例注入到需要调用其数据的窗口B中,避免了使用全局变量、单例模式等强耦合实现,也方便后续做单元测试时直接替换C为Mock实例,符合高内聚低耦合的设计原则。
内容的提问来源于stack exchange,提问作者Artyom Klimov
相关产品推荐
相关产品推荐

