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

我想要一个带有函数 locations 的模块 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

等等。

好吧,我已经尝试了很多 import 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 ,请参阅 the docs (并仔细阅读所有部分 - “按我说的做,而不是按我做的做”;-)。

关于python元编程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2482060/

10-16 04:45