如何枚举package中的modules

shaver 2010-10-20 09:12:32
某package中有文件如下:
somepackage:
__init__.py
a.py
b.py
c.py

__init__.py的内容:

import a, b, c
__all__ = [a, b, c]

现在的问题是,__all__的内容是固定的。如何用代码动态生成__all__的内容?
比如,我想在该package中增加d.py,如何不用修改__init__.py的内容,d自动出现在__all__中?
...全文
112 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
劲草 2010-12-12
  • 打赏
  • 举报
回复
向各位学习了
zanpen2000 2010-11-15
  • 打赏
  • 举报
回复
一般我都是建立一个lib目录,然后建立一个文本文件 : __init__.py,内容为空,之后 from lib import module_name,如果需要动态加载,楼上几位的方法都行的。3楼的做法是可行的,也更灵活,我也在用。
iambic 2010-10-29
  • 打赏
  • 举报
回复
应用级别的问题,找到解决方案就行了。语言级别上,常见的都不支持这种用法。
shaver 2010-10-29
  • 打赏
  • 举报
回复
之所以有这个问题,是我想实现这样的功能:

某个系统,需要技术服务人员或用户可以定制规则。规则的通用部分,我已经放在父类里面实现了。子类统一放在某个目录下,系统启动时读取该目录下的各子类文件,加载各规则。
除了枚举该目录下文件的方法外,我想知道python有没有直接的支持,可以把该目录看做一个package。当增加一个新的规则文件时,直接把文件放置在该目录下即可,而不需要修改__init__.py文件。

继续讨论中......
angel_su 2010-10-21
  • 打赏
  • 举报
回复
模块的__all__有特殊用途,可控制from package import * 这种写法倒入那些名称,所以还是显式制定比较合理,譬如a,b是public, c是a或b内部自己用,那么__init__.py的内容可以写成:

__all__ = ['a', 'b']
from package import *
iambic 2010-10-21
  • 打赏
  • 举报
回复
这个不是python的惯用法,建议你不要这样用了。非要用的话也可以,比如可以这样:

import os

__all__ = [f[:-3] for f in os.listdir(os.path.dirname(__file__)) if f.endswith(".py")]
__all__.remove('__init__')

for m in __all__:
__import__(__name__ + '.' + m)


notax 2010-10-20
  • 打赏
  • 举报
回复
噢,又打错了


somepackage.__all__= [ a, b, c, d]
notax 2010-10-20
  • 打赏
  • 举报
回复
动太加一加就行
比如在e.py中


import somepackage
from somepackage import a, b, c, d

print somepackage.__all__
mypkg.__all__ = [ a, b, c, d]
print somepackage.__all__


#PYTHONPATH里要加somepackage 路径
什么是TypeScript?TypeScript是JavaScript的加强版,它给JavaScript添加了可选的静态类型和基于类的面向对象编程,它拓展了JavaScript的语法。不过,你不必担心TypeScript跟浏览器不兼容,因为在编译时,它产生的都是JavaScript代码。为什么要学TypeScritpt?TypeScript是一门很有前景和钱景的语言;它能大幅的提高工作效率,并且减少错误;这堂课我们能学到什么?随着前端行业越来越受到重视,前端的逻辑也越来越复杂,对前端从业者的职业要求也越来越高,Vue、Angular、React和一些新的框架层出不穷,而作为Angular等框架的推荐语言TypeScript也在市场得到了认可和追捧,不管是前端、还是游戏引擎、以及一些大型项目开发都开始展露头角。但是这方面学习资源相对较少。课程特点:本堂课程通过深入浅出的讲解,幽默风趣的风格; 让大家在3个小时的课程能够掌握大部分TypeScript的核心知识; 同时能够使用TypeScript进行React等框架的项目开发; 为大家的学习和在工作使用TypeScript打下坚实的基础。课程大纲:1.TS的初步配置2.TS 数据类型 any 枚举3.函数的参数和返回值类型4.类非常重要 非常重要5.静态类属性和方法 Math6.泛型7.模块化 systemjs8.项目TS+react+webpack结合的工作流应类型管理 js->tsx 2.0如何用TS开发react->TSX(难点->官网 项目)工作流 package.json -> npm start npm run build 适用人群:1.Typescript零基础想掌握ts正确学习姿势和入门的初学者2.经验丰富的jser想拓宽自己知识掌握ES6和ES7新功能的从业者3.想在工作和项目使用ts结合VAR框架的人员4.有志于成为全栈开发人员却苦于无法入门后端和跟后端沟通不畅的开发者5.想深入了解和使用angular的人员

37,721

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧