首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以引用以其包为前缀的Python类吗?

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

Stack Overflow用户
提问于 2019-05-23 01:43:38
回答 1查看 33关注 0票数 0

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

代码语言:javascript
复制
root/
  airplane/
    __init__.py
    propeller.py # defines class Propeller
    engine.py    # defines class Engine
  boat/
    __init__.py
    engine.py    # defines class Engine

为了避免歧义,我想引用以包为前缀的类构造函数(或其他类/静态方法):

代码语言:javascript
复制
airplaneEngine = airplane.Engine('4 cylinder')
boatEngine     = boat.Engine('6 cylinder')
if boatEngine.isFasterThan(airplaneEngine): print('Boat wins!')

但是我不能让导入正常工作。

代码语言:javascript
复制
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

我意识到我可以做到:

代码语言:javascript
复制
from airplane.engine import Engine as AirplaneEngine
airplaneEngine = AirplaneEngine('4 cylinder') 

或者这样:

代码语言:javascript
复制
root/
  airplane.py # defines class Propeller & class Engine
  boat.py     # defines class Engine

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

但我不喜欢这些解决方案中的任何一个。有没有办法引用以包为前缀的静态/类方法?

EN

回答 1

Stack Overflow用户

发布于 2019-05-23 01:47:44

代码语言:javascript
复制
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

应该是

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56262278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档