0

我有一个包含房间的地牢对象。每个房间都有一个名字。我想设计一个从其客户端接受此 API 的类:

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

到目前为止,我能够设计这样的东西:

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

编写一个采用 str 参数并按名称查找房间的方法很容易。

但是,如果我想让房间“访问器”表现得像一本字典呢?我有哪些选择?

我已经想到了这一点,但是,作为一个真正的初学者,我无法决定:

  • 创建 dict 的子类型,覆盖其__getattribute__方法

我不喜欢的是让客户能够这样做:

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 回答