我可以引用以其包为前缀的Python类吗?

我可以引用以其包为前缀的Python类吗?,python,Python,我在包中有一些Python模块,如下所示: root/ airplane/ __init__.py propeller.py # defines class Propeller engine.py # defines class Engine boat/ __init__.py engine.py # defines class Engine 我希望引用以包为前缀的类构造函数(或其他类/静态方法),以避免歧义: airplaneEng

我在包中有一些Python模块,如下所示:

root/
  airplane/
    __init__.py
    propeller.py # defines class Propeller
    engine.py    # defines class Engine
  boat/
    __init__.py
    engine.py    # defines class Engine
我希望引用以包为前缀的类构造函数(或其他类/静态方法),以避免歧义:

airplaneEngine = airplane.Engine('4 cylinder')
boatEngine     = boat.Engine('6 cylinder')
if boatEngine.isFasterThan(airplaneEngine): print('Boat wins!')
但我无法让导入正常工作

from airplane import engine
airplaneEngine = airplane.Engine('4 cylinder') 
# NameError: name 'airplane' is not defined

from airplane.engine import Engine
airplaneEngine = airplane.Engine('4 cylinder') 
# NameError: name 'airplane' is not defined
我意识到我可以做到这一点:

from airplane.engine import Engine as AirplaneEngine
airplaneEngine = AirplaneEngine('4 cylinder') 
或者这个:

root/
  airplane.py # defines class Propeller & class Engine
  boat.py     # defines class Engine

import airplane
airplaneEngine = airplane.Engine('4 cylinder')
但我不喜欢这两种解决方案。是否有方法引用包前缀的静态/类方法

from airplane import engine
airplaneEngine = airplane.Engine('4 cylinder') 
# NameError: name 'airplane' is not defined

from airplane.engine import Engine
airplaneEngine = airplane.Engine('4 cylinder') 
# NameError: name 'airplane' is not defined
应该是

from airplane import engine
airplaneEngine = engine.Engine('4 cylinder') 

from airplane.engine import Engine
airplaneEngine = Engine('4 cylinder') 
在第一次尝试中,您将导入
引擎
文件,并可以引用其中的类。您尚未导入
飞机
,只导入该文件夹中的文件


在第二次尝试中,您正在导入
引擎
类,但仍然没有导入
飞机
。此外,
引擎
类不属于
飞机
,它位于
引擎.py

中,因此。。。那就不可能了?无论是
engine.engine
还是仅仅
engine
都不能实现我在这里想要的(自文档化)名称空间(
airplane.engine
)。我看到的唯一方法是在单个文件
planet.py
中以这种方式定义我想要引用的所有类(
Engine
propolor
)。我想你可以在planner中创建一个
planner.py
文件并导入/实例化每个类。然后,您可以从飞机导入飞机执行
,然后将其称为
飞机。引擎
。Planet.py文件的顶部基本上有
import engine
,然后是
engine=engine.engine()
Yes!如果我把
Engine=Engine.Engine
(不带参数)放在
飞机/飞机.py
内,那么我可以根据需要构造一个
飞机.Engine(…)