Assuming I have a module example.py with the following two classes. One containing the other:
#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)
If I want to instantiate company in other file called work.py I go:
#work.py
from example import Company
mycompany=company('bmw','michael)
This code seems to work. Now I don't understand why because how does python know about the class Employee in the file work.py?
Would the code be "safer" in work.py if I do:
from example import Company, Employee
CodePudding user response:
work.py doesn't need to know about it. Company.__init__ has its own reference to the global scope of example where the free variable Employee is looked up.
>>> from example import Company
>>> Company.__init__.__globals__['Employee']
<class 'example.Employee'>
from example import Company creates a new global variable in work.py that is initialized using example.Company. Since Company.__init__ doesn't know or care about the global scope of work.py, there's no need to create an additional Employee global there.
