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

2024-06-30 13:36:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我在包中有一些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')

但我不喜欢这两种方法。是否有方法引用以包为前缀的静态/类方法


Tags: 方法frompyimportinitrootengineclass
1条回答
网友
1楼 · 发布于 2024-06-30 13:36:50
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') 

在第一次尝试中,您将导入engine文件,并可以引用其中的类。您没有导入airplane,只导入了该文件夹中的文件

在第二次尝试中,您正在导入Engine类,但仍然没有导入airplane。另外,Engine类不属于airplane,它位于engine.py

相关问题 更多 >