2016-10-07 5 views
-1

私はプログラミングが初めてで、私はPythonを選択しました。私はすべてのPythonを苦労して学びました。私は自分自身で「自分のアドベンチャーゲームを選んでください」というコードを書いています。今はMOOに似た何かを作っていきます。'containers.Room'のような型クラス文字列からクラスのインスタンスを作成しますか?

私のオブジェクトデータベースは非常にシンプルに構成されています(ゲーム内のすべてがオブジェクトになり、別の属性データベースがオブジェクトをカスタマイズするのに役立ちます)。現在のオブジェクト構造は、このようなものです:

OBJECTID、名前、型クラスは、

locationidが戻って同じOBJECTID、オブジェクトは、部屋、またはプレイヤーに属することができ、そのように外部キーですlocationid。

私の質問は、どのように私はtypeclassを設定したいと思います。現在、私はそこにコンテナのような文字列を格納したい:ルーム。私はデータベースから情報を引き出す(または新しい部屋を作成する)とき、私はクラスルーム()のインスタンスをコンテナと呼ばれる別のpythonスクリプトに含めることができるようにしたい。私はコンテナのインポ​​ートルームからやっていることを知っていますが、格納された文字列から動的に行う方法はわかりません。

私と知り合い、答えを共有してくれる人に、ありがとうございます!明快ため

編集(私はrambled ...)

私は、私のデータベース(「module.Class」)から文字列を引っ張ってそのモジュールとクラスをインポートし、そして言ったクラスのインスタンスを作成したいです。

edit2 ここではsqliteコマンドを使用しています。最後に、私はtypeclassのインスタンスを返したいと思います。

def create(self, **args): 
    #requires name=string and typeclass=string. no locationid for rooms 
    #connect to the sqlite db and create a cursor for commands 
    conn = sqlite3.connect(DB_PATH) 
    cursor = conn.cursor() 


    #probably a better way to do this, but this is what I came up with 
    columns = [] 
    values = [] 
    for k, v in args.iteritems(): 
     #iterate through arguments, if the column ends in 'id' assume int 
     columns.append(k) 
     if k[-2:] == "id": 
      values.append("%s" % v) 
     else: 
      values.append(("'%s'" % v)) 

    #join columsn and rows and plug them into the query 
    cols = ', '.join(columns) 
    rows = ', '.join(values) 

    query = "INSERT INTO objects_db (%s) VALUES (%s)" % (cols, rows) 

    #execute the query, commit, and close the connection. 
    cursor.execute(query) 
    conn.commit() 
    conn.close() 

    >>> stuff here to import args['typeclass'] <<< 

だから私のようなライン持ってできるようになります。create =

このmyobjを(名前= "私のオブジェクト" を、型クラス= "objects.things.Thing")作成することになり

データベース内の「my object」と「myobj」変数は、objectsフォルダとthings.pyファイルにあるThingクラスのインスタンスになります。

+0

あなたの質問を編集してより明確にできますか? –

+0

データベース( "module.Class")から文字列を取り出し、そのモジュールとクラスをインポートし、そのクラスのインスタンスを作成したいとします。 – imrobertjames

+0

データベースの外観やサンプル行を貼り付けることはできますか?それはcsvファイルですか? – mitoRibo

答えて

0

私は自分のdb.pyスクリプトをテストするために直接実行していたときに兄弟からモジュールをインポートしようとしたことが原因であることを知りました。

私は私がこのような何かをすることができ、プロジェクトのための私のルートディレクトリにmain.pyファイルを作成:私が働いているの作成機能は、オブジェクトのみに使用され

typeclass = args['typeclass'].split('.') 
    import_path = "objects.%s" % typeclass[0] 

    _temp = importlib.import_module(import_path) 
    myobj = getattr(_temp, typeclass[1]) 

    return myobj(args['name'], args['locationid']) 

ので、私オブジェクトフォルダを引き継ぐことができました。だから私はちょうどものが必要でした。私はそれを分割し、スクリプトをインポートし、属性を取得しそこから実行することができました。

関連する問題