如何导入模块中使用组合关系的Python类?是否需同时导入依赖类
问题解答
为什么work.py未导入Employee也能正常实例化Company?
Python的模块导入和命名空间逻辑如下:
- 当你执行
from example import Company时,Python会先完整加载example.py模块,模块内的所有类、函数、变量都会在**example模块自身的命名空间**中完成创建,之后才会把Company类的引用暴露到work.py的当前命名空间。 Company类的__init__方法中调用Employee时,查找的是Company类定义所在的命名空间(也就是example模块的命名空间)里的Employee,和work.py的当前命名空间有没有导入Employee完全无关。
注意你提供的代码存在几处语法错误,实际无法运行,修正后才能正常执行:
example.py中__init__方法内的Self拼写错误,Python关键字为小写的selfwork.py中实例化时类名写为小写company,需要和定义的类名一致写为Company,且字符串'michael缺少闭合的单引号
同时导入Company和Employee不会更“安全”
- 如果你在
work.py中不会直接调用、实例化Employee类,额外导入Employee属于冗余代码,没有任何价值。 - 额外导入无用的对象反而会增加命名冲突的风险:比如
work.py自身也定义了同名的Employee类,多余的导入会导致类覆盖问题,反而更容易出bug。 - 只有当你需要在
work.py中直接操作Employee类时,才有必要导入这个类。
内容的提问来源于stack exchange,提问作者JFerro
相关产品推荐
相关产品推荐

