繁体   English   中英

python元编程

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM