我可以引用以其包为前缀的Python类吗?
我在包中有一些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
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(…)
。