1

数週間前に Python の学習を始めたばかりで、テキストベースのアドベンチャー ゲームを書き始めました。安全ではないと読んだ eval() を使用する以外に、文字列をクラスのインスタンスに変換する良い方法を見つけるのに苦労しています。参考までに、私が取り組んでいるものは次のとおりです。

class Room(object):
    """Defines a class for rooms in the game."""
    def __init__(self, name, unlocked, items, description, seen):
        self.name = name
        self.unlocked = unlocked
        self.items = items
        self.description = description
        self.seen = seen


class Item(object):
    """ Defines a class of items in rooms."""
    def __init__(self, name, actions, description):
        self.name = name
        self.actions = actions
        self.description = description



def examine(input):
    if isinstance(eval(input), Room):
        print eval(input).description
    elif isinstance(eval(input), Item):
        print eval(input).description
    else:   
        print "I don't understand that."

入力が文字列の場合、安全にクラス オブジェクトにしてデータ属性 .description にアクセスするにはどうすればよいですか? また、これについて完全に間違った方法で行っている場合は、お気軽に別の方法を提案してください。

4

2 に答える 2

2

Eval はここでは問題ではありません。安全な動作が必要な場合は、自分で解析せずにインスタンスを表す信頼できない文字列を入力することはできません。ユーザーから提供された文字列を解釈するために何らかの方法 (eval またはその他) で Python を使用すると、その文字列に悪意のある Python コードが含まれる可能性があるため、アプリケーションは安全ではありません。したがって、ここでは安全性とシンプルさのどちらかを選択する必要があります。

于 2013-08-26T08:10:22.243 に答える
2

辞書を使う:

lookup = {'Room': Room(), 'Item': Item()}
myinstance = lookup.get(input)
if myinstance is not None:
    print myinstance.description
于 2013-08-26T07:38:21.880 に答える