0

部屋を含む Dungeon オブジェクトがあります。各部屋には名前があります。クライアントからこの API を受け入れるクラスを設計したいと思います。

dungeon = Dungeon()
room = dungeon.room['room_name']

これまでのところ、次のようなものを設計できました。

dungeon = Dungeon()
room = dungeon.room('room_name')

str パラメータを取り、部屋を名前で検索するメソッドをコーディングするのは簡単です。

しかし、ルームの「アクセサ」を辞書のように動作させたい場合はどうすればよいでしょうか。私のオプションは何ですか?

私はこれについて考えましたが、真の初心者であるため、決定できません。

  • __getattribute__メソッドをオーバーライドして、dict のサブタイプを作成します。

私が気に入らないのは、クライアントがこれを行うことができることです:

dungeon.room.keys()

ただし、すべての部屋の名前を発見してください。

質問が専門家にとってばかげているように聞こえる場合は...申し訳ありません。他に何が言えますか?

4

1 に答える 1

4

コードで定義__getitem____(self, key)- これにより、オブジェクトへの辞書スタイルのアクセスが可能になります。

class Room(object):
    # stuff...
    def __getitem__(self, key):
        # get room using the key and return the value
        # you should raise a KeyError if the value is not found
        return self.get_room(key)

dungeon.room = Room()
dungeon.room['room_name']  # this will work!
于 2013-02-24T07:09:07.283 に答える