[英]python metaprogramming
我正在尝试归档一个由于我不擅长Python元编程而变得有点复杂的任务。
我希望有一个带有函数get_location(name)
的模块locations
,它返回一个在文件夹中的文件夹/定义的类,其名称传递给function。 类的名称类似于NameLocation。
所以,我的文件夹结构:
program.py
locations/
__init__.py
first.py
second.py
program.py将与:
from locations import get_location
location = get_location('first')
和location是在first.py中定义的类,如下所示:
from locations import Location # base class for all locations, defined in __init__ (?)
class FirstLocation(Location):
pass
等等
好吧,我已经尝试了很多导入和getattribute语句,但现在我感到无聊和投降。 如何归档这种行为?
我不知道为什么,但这个代码
def get_location(name):
module = __import__(__name__ + '.' + name)
#return getattr(module, titlecase(name) + 'Location')
return module
回报
>>> locations.get_location( 'first')
<module 'locations' from 'locations/__init__.py'>
位置模块! 为什么?!
你需要__import__
模块; 在那之后,从中获取一个attr并不难。
import sys
def get_location(name):
fullpath = 'locations.' + name
package = __import__(fullpath)
module = sys.modules[fullpath]
return getattr(module, name.title() + 'Location')
编辑 : __import__
返回包,所以你还需要一个getattr
,看看文档 (并仔细阅读所有部分 - “按我说的那样做”;-)。
我想你正在寻找:
location = __import__('first')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.