首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何导入未使用import *导入其他模块的模块

如何导入未使用import *导入其他模块的模块
EN

Stack Overflow用户
提问于 2014-03-20 15:54:19
回答 3查看 153关注 0票数 2

在父类basehandler.py中,有几个导入语句、一个常量和一个类:

代码语言:javascript
运行
复制
import os
import sys
import cgi
import json

JINJA_ENVIRONMENT = jinja2.Environment(foobar)

class BaseHandler(webapp2.RequestHandler):
    pass

另一个模块,main.py,然后用from basehandler import *导入这个父模块

如果我们使用from basehandler import BaseHandlerimport basehandler来避免from foo import *语句,那么就不会收到父类导入的模块,程序会抛出异常。

如何在仍然正确导入父模块及其导入的模块的同时避免from foo import *

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-24 07:26:37

然后没有收到父类导入的模块,程序抛出异常。

如果您的程序使用一个模块,那么您应该在模块本身中导入它,而不是在其他模块中导入它,例如,在您的程序中使用import os,而不是在from foo import *中使用foo模块导入os

要回答标题中的问题:使从另一个模块导入的所有模块都可以使用,而不需要外卡导入:

代码语言:javascript
运行
复制
import inspect 
import foo # your other module

# get all modules from `foo` and make the names available
globals().update(inspect.getmembers(foo, inspect.ismodule)) #XXX don't do it

就像from foo import *只导入模块一样。同样的警告外卡进口也适用于此。

票数 1
EN

Stack Overflow用户

发布于 2014-03-20 16:08:13

在引用this answer时,可以在basehandler.py中定义一个函数,生成所有导入的模块:

代码语言:javascript
运行
复制
import os,sys,cgi,json
import types

def get_imports():
    for name, val in globals().items():
        if isinstance(val, types.ModuleType):
            yield val.__name__

然后,...and在main.py中导入该函数,并使用exec导入相关模块:

代码语言:javascript
运行
复制
from basehandler import BaseHandler, get_imports

for i in get_imports():
    exec "import %s" % i

print os.getcwd() #this will work

不过,这是一种很糟糕的做法,难道您不只是重新导入main.py中的模块列表有什么特别的原因吗?

票数 1
EN

Stack Overflow用户

发布于 2014-03-20 16:45:42

我说这里还有其他错误--从其他地方导入您的“else处理程序”模块应该只起作用:它需要的名称、模块、类和对象绑定到自己的命名空间,并且存在于该模块中定义的任何代码的globals字典中--不管您是用from basehandler import BaseHandler语句获得它的。

请把你的全部回溯贴出来,这样人们就可以知道那里到底发生了什么。

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

https://stackoverflow.com/questions/22538388

复制
相关文章

相似问题

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