如何从模块导入 class with composition?

How to import a class with composition from a module?

假设我有一个包含以下两个 class 的模块 example.py。一个包含另一个:

#example.py
class Employee():
    def __init__(self,name):
        Self.name=name

class Company():
    def __init__(self,company,boss):
        Self.company=company
        self.boss = Employee(boss)

如果我想在另一个名为 work.py 的文件中实例化公司,我会去:

#work.py
from example import Company
mycompany=company('bmw','michael)

此代码似乎有效。现在我不明白为什么,因为 python 怎么知道文件 work.py 中的 class Employee?

如果我这样做,work.py 中的代码会“更安全”吗:

from example import Company, Employee

work.py 不需要知道。 Company.__init__example 的全局范围有自己的引用,其中查找了自由变量 Employee

>>> from example import Company
>>> Company.__init__.__globals__['Employee']
<class 'example.Employee'>

from example import Companywork.py 中创建一个使用 example.Company 初始化的新全局变量。由于 Company.__init__ 不知道也不关心 work.py 的全局范围,因此没有必要在那里创建一个额外的 Employee 全局范围。