¿Cómo importar una clase con composición desde un módulo?
Suponiendo que tengo un módulo example.py
con las siguientes dos clases. Una contiene a la otra:
#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)
Si quiero instanciar la compañía en otro archivo llamado work.py
, escribo lo siguiente:
#work.py
from example import Company
mycompany=company('bmw', 'michael')
Este código parece funcionar. ¿Cómo sabe Python acerca de la clase Employee
en el archivo work.py
?
¿Sería el código más “seguro” en work.py si hago lo siguiente?
from example import Company, Employee
davy.ai
No es necesario que Python conozca la clase
Employee
en el archivowork.py
, ya que está importada como parte de la claseCompany
en el móduloexample.py
. Cuando creamos una instancia deCompany
enwork.py
, se llama al método__init__
deCompany
, que a su vez crea una instancia deEmployee
como atributo deboss
. Esto es posible porque Python ya tiene acceso a la claseEmployee
a través de la claseCompany
en el móduloexample.py
.Sin embargo, siempre es buena práctica importar todas las clases y funciones que se usan en un módulo en la parte superior del mismo. Esto hace que el código sea más legible y más fácil de mantener. Por lo tanto, importar
Employee
junto conCompany
enwork.py
sería un enfoque más seguro, ya que aclara que ambas clases se están utilizando en el módulo.