栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

从子目录中的不同文件导入类

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

从子目录中的不同文件导入类

尽管此处使用的名称与问题的目录结构中显示的名称不同,但是您可以使用我对名为Namespacing和classes的问题的答案。在

__init__.py
这里所示本来还允许
usepackage.py
脚本已经这样写的(
package
映射到
subdir
你的问题,并
Class1
myclass01
等):

from package import *print Class1print Class2print Class3

修订(更新):

糟糕,抱歉,我的其他答案中的代码并未完全满足您的要求-
它只会自动导入任何程序包子模块的名称。为了使其也从每个子模块导入命名属性,需要多几行代码。这是软件包

__init__.py
文件的修改版本(在Python
3.4.1中也可以使用):

def _import_package_files():    """ Dynamically import all the public attributes of the python modules in this        file's directory (the package directory) and return a list of their names.    """    import os    exports = []    globals_, locals_ = globals(), locals()    package_path = os.path.dirname(__file__)    package_name = os.path.basename(package_path)    for filename in os.listdir(package_path):        modulename, ext = os.path.splitext(filename)        if modulename[0] != '_' and ext in ('.py', '.pyw'): subpackage = '{}.{}'.format(package_name, modulename) # pkg relative module = __import__(subpackage, globals_, locals_, [modulename]) modict = module.__dict__ names = (modict['__all__'] if '__all__' in modict else          [name for name in modict if name[0] != '_'])  # all public exports.extend(names) globals_.update((name, modict[name]) for name in names)    return exportsif __name__ != '__main__':    __all__ = ['__all__'] + _import_package_files()  # '__all__' in __all__

或者,您可以将以上内容放入包目录中单独的.py模块文件中(例如),

_import_package_files.py
并从包中使用它,
__init__.py
如下所示:

if __name__ != '__main__':    from ._import_package_files import *  # defines __all__    __all__.remove('__all__')  # prevent export (optional)

无论您以什么名字命名文件,它都应该以

_
下划线字符开头,这样它就不会
import
递归地尝试自身。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/638042.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号