4

我正在尝试归档一项任务,结果证明它有点复杂,因为我不太擅长 Python 元编程。

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

所以,我的文件夹结构:

program.py
locations/
    __init__.py
    first.py
    second.py

program.py 将与:

from locations import get_location
location = get_location('first')

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

from locations import Location # base class for all locations, defined in __init__ (?)
class FirstLocation(Location):
    pass

等等

好的,我已经尝试了很多importgetattribute语句,但现在我很无聊并且投降了。如何归档此类行为?


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

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'>

位置模块!为什么?!

4

2 回答 2

6

你确实需要__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,请参阅文档(并仔细阅读所有部分-“照我说的做,不要照我做的做”;-)。

于 2010-03-20T05:32:22.930 回答
1

我想你正在寻找:

location = __import__('first')
于 2010-03-20T05:30:32.883 回答