每个py类中都有一个包含各种程序定义的py包。我想列出一个列表,其中每个条目都是其中一个类的实例。此外,我的程序不知道包中有多少个文件,也不知道文件或类的名称,所以我不能只导入每个文件。理想情况下,我应该能够修改包的内容(取出文件、放入新文件等),而不必重写程序的其他部分。有办法吗?在
最初,我在每个文件中都有一个“if_uuname_u==”uu main_uu':return foo()'行,并尝试使用execfile()附加到列表中,但显然这行不通。有什么想法吗?在
抱歉,如果这有点模糊。如果需要的话,我会尽力澄清。我使用的是python2.5.4。在
编辑:
我的程序是一个地下城和龙的随机字符生成器。我为程序需要的每种主要数据类型做了一个包。我有一个用于类、种族、项目等的包,当生成一个字符时,我的程序会列出每种数据类型的列表,以便在生成字符时对其进行排序。例如,当装备一个角色时,程序可以查看武器列表,过滤掉所有不适合该角色的武器,然后从剩余的武器中随机选择。在
我不想指定文件名,因为我希望以后能够轻松地添加到此程序中。如果以后我想在程序中添加更多的武器类型,我只需编写一些新的类描述并将它们放入武器包中,程序就可以使用它们,而不需要我编辑任何其他代码。在
这听起来有点糟糕。如果你详细说明这个问题,我们可以用其他方法帮助你解决它,那可能会更好。然而,你想要的并不难:
编辑:稍微简化了代码。在
如果您愿意做更多的工作,可以使用^{}'s entry points 来公布和发现相关的类。Fedora帐户系统uses this提供{a3}。在
要做到这一点,你需要做以下事情:
轮流参加每一部分:
os.walk
和os.path
查找文件并构建到源的完整路径。在my_file
是指向源文件的完整路径,my_dict
是返回结果代码的字典(例如,源文件中声明的任何类都将成为此dict的成员)。注意,只有当导入的文件不是有效的python模块/包层次结构的一部分(包中有一个init.py文件)时,才需要使用此方法—如果是,则可以使用import()。在相关问题 更多 >
编程相关推荐