Val*_*lev 4 python metaprogramming python-module
我正在尝试归档一个由于我不擅长Python元编程而变得有点复杂的任务.
我想要一个locations带有函数的模块get_location(name),它返回一个在文件夹的位置/中定义的类,其名称传递给function.类的名称类似于NameLocation.
所以,我的文件夹结构:
program.py
locations/
__init__.py
first.py
second.py
Run Code Online (Sandbox Code Playgroud)
program.py将与:
from locations import get_location
location = get_location('first')
Run Code Online (Sandbox Code Playgroud)
和location是在first.py中定义的类,如下所示:
from locations import Location # base class for all locations, defined in __init__ (?)
class FirstLocation(Location):
pass
Run Code Online (Sandbox Code Playgroud)
等等
好吧,我已经尝试了很多导入和getattribute语句,但现在我感到无聊和投降.如何归档这种行为?
我不知道为什么,但这个代码
def get_location(name):
module = __import__(__name__ + '.' + name)
#return getattr(module, titlecase(name) + 'Location')
return module
Run Code Online (Sandbox Code Playgroud)
回报
>>> locations.get_location( 'first')
<module 'locations' from 'locations/__init__.py'>
Run Code Online (Sandbox Code Playgroud)
位置模块!为什么?!
你确实需要__import__这个模块; 在那之后,从中获取一个attr并不难.
import sys
def get_location(name):
fullpath = 'locations.' + name
package = __import__(fullpath)
module = sys.modules[fullpath]
return getattr(module, name.title() + 'Location')
Run Code Online (Sandbox Code Playgroud)
编辑:__import__返回包,所以你还需要一个getattr,看看文档(并仔细阅读所有部分 - "按照我的说法不做我做";-).
| 归档时间: |
|
| 查看次数: |
5917 次 |
| 最近记录: |