Python-导入模块导入模块

标签 python class module

我在同一位置有三个脚本:

   /__init__.py
    interface.py
    radio.py
    playlist.py

playlist.py 存储了子类,例如:

class playlist1(radio):
    '''child class'''

radio.py有父类:

class radio(object):
    '''parent class'''

我正在尝试运行 interface.py,它具有:

if __name__ == "__main__":
    from playlist import *

playlist.py 中,我依次导入了以下内容:

from radio import radio

但是当我运行interface.py时,出现以下错误:

导入错误:无法导入名称 radio

我使用python 2.x。怎么了?

最佳答案

您对情况的描述忽略了一个关键部分:这些模块所在的包。例如,如果它们位于 foo 包中,情况将如下所示:

foo/
    __init__.py
    interface.py
    radio.py
    playlist.py

在这种情况下,playlist 模块有两种常用方法从 radio 模块导入名称:

# 1. Fully qualified.
from foo.radio import radio

# 2. Relative import.
from .radio import radio

强烈建议使用第二种方法,因为它不会产生歧义。

您还没有告诉我们您是如何运行interface.py的。这些细节也会影响导入情况。

如果您在包中组织代码,则需要遵循常规 项目结构。在这种布局中,您倾向于在项目中工作 根。您还需要一个正确的 setup.py 文件。它可能如下所示:

# ----
# Directory layout.
some_project/
    foo/
        __init__.py
        interface.py
        playlist.py
        radio.py
    setup.py

    # You work at this level.

# ----
# interface.py 

from playlist import radio

def main():
    print radio

# ----
# playlist.py

from .radio import radio

# ----
# radio.py

radio = 123

# ----
# setup.py

from setuptools import setup

setup(
    name     = 'foo',
    version  = '1.0',
    zip_safe = False,
    packages = ['foo'],
    entry_points = {
        'console_scripts': [
            'foobar = foo.interface:main',
        ],
    },
)

# ----
# Install stuff for dev work (ie in "editable" mode).
pip install -e .

# ----
# Run the command line entry point.
foobar

关于Python-导入模块导入模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41418153/

相关文章:

Python 3.3 Tkinter 更改 LabelFrame 位置

python - 在同一 Apache 服务器上运行 mod_wsgi (Flask) 应用程序和非 mod_wsgi 应用程序

python - 您可以从类中获取实例变量名称吗?

F# 检查算术范围

Javascript CommonJS - 模块在哪里?

python - 如何在循环期间更新 Django 查询集中的数据?

Python - 多线程/多处理

c# - 在一个对象中创建一类对象

java - 在我的 Activity 类中使用构造函数有意义吗?

python - 让 App Engine 模块工作