我正在尝试归档一个任务,结果证明它有点复杂,因为我不太擅长 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/