如何从模块导入 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 Company
在 work.py
中创建一个使用 example.Company
初始化的新全局变量。由于 Company.__init__
不知道也不关心 work.py
的全局范围,因此没有必要在那里创建一个额外的 Employee
全局范围。
假设我有一个包含以下两个 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 Company
在 work.py
中创建一个使用 example.Company
初始化的新全局变量。由于 Company.__init__
不知道也不关心 work.py
的全局范围,因此没有必要在那里创建一个额外的 Employee
全局范围。