有一个班级充当dict?

Cas*_*all 0 python python-3.x

我有一个像这样定义的类:

class GameState:

    def __init__(self, state=None):
        if state is None:
            self.fps = 60
            self.speed = 1
            self.bounciness = 0.9
            self.current_level = None

            self.next_frame_time = 0
            self.init_time = 0
            self.real_time = 0
            self.game_time = 0

            self.game_events = []
            self.real_events = []
        else:
            # THIS being the key line:
            self.__dict__.update(**state)
Run Code Online (Sandbox Code Playgroud)

是否有我可以定义的接口,这样就可以了(即**运算符适用于我的类):

>>> a = GameState()
>>> b = GameState(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: update() argument after ** must be a mapping, not GameState
Run Code Online (Sandbox Code Playgroud)

从本质上讲,我想要b承担所有的属性a.

我认为它不会起作用,但我尝试定义__getitem__没有任何运气.

编辑:我想避免使用b __dict__,因为我也希望能够将字典作为参数传递,并且可能在其他地方的GameState对象上使用**.

Emi*_*l M 5

让GameState继承自dict:

class GameState(dict) 
Run Code Online (Sandbox Code Playgroud)

并重写__setattr函数,如下所示:

def __setattr__(self,name,value) :
    self.__dict__[name] = value
    self[name] = value
Run Code Online (Sandbox Code Playgroud)