4

Python メタプログラミングが苦手なため、少し複雑なタスクをアーカイブしようとしています。

関数に渡された名前のファイル内のフォルダーの場所/で定義されたクラスを返すlocationsfunctionを持つモジュールが必要です。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'>

ロケーションモジュール!どうして?!

4

2 に答える 2

6

__import__モジュールが必要です。その後、そこから属性を取得するのは難しくありません。

import sys

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

編集__import__パッケージを返すので、もう1つ必要です。ドキュメントgetattrを参照してください(そして、すべてのセクションを注意深く読んでください-「私が言うようにではなく、私が言うようにしないでください」;-)。

于 2010-03-20T05:32:22.930 に答える
1

私はあなたが探していると思います:

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