首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python元编程

python元编程
EN

Stack Overflow用户
提问于 2010-03-20 05:26:27
回答 2查看 6.1K关注 0票数 4

我正在尝试归档一个任务,由于我不太擅长Python元编程,所以这个任务变得有点复杂。

我希望有一个带有函数get_location(name)的模块get_location(name),它返回一个在文件夹位置/文件中定义的类,其中包含传递给函数的名称。类名类似于NameLocation。

所以,我的文件夹结构:

代码语言:javascript
复制
program.py
locations/
    __init__.py
    first.py
    second.py

program.py将与:

代码语言:javascript
复制
from locations import get_location
location = get_location('first')

这个位置是在first.py smth中定义的一个类,如下所示:

代码语言:javascript
复制
from locations import Location # base class for all locations, defined in __init__ (?)
class FirstLocation(Location):
    pass

等。

好的,我已经尝试过很多导入getattribute语句,但是现在我感到厌烦和放弃。如何记录这些行为?

我不知道为什么,但这段代码

代码语言:javascript
复制
def get_location(name):
   module = __import__(__name__ + '.' + name)
   #return getattr(module, titlecase(name) + 'Location')
   return module

返回

代码语言:javascript
复制
>>> locations.get_location( 'first')
<module 'locations' from 'locations/__init__.py'>

定位模块!为什么?!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-20 05:32:22

您确实需要对模块进行__import__;在此之后,从它获得攻击并不困难。

代码语言:javascript
复制
import sys

def get_location(name):
    fullpath = 'locations.' + name
    package = __import__(fullpath)
    module = sys.modules[fullpath]
    return getattr(module, name.title() + 'Location')

编辑__import__返回包,所以您还需要一个getattr,请参阅医生们 (并仔细阅读所有章节-“照我说的做,不做我做的”;-)。

票数 6
EN

Stack Overflow用户

发布于 2010-03-20 05:30:32

我想你是在找:

代码语言:javascript
复制
location = __import__('first')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2482060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档