Python dict解包运算符未在构造函数中解包字符串

问题描述

我正在使用服务器端的 python 中的 socketio 和客户端的 JS 创建一个小应用程序。 对于我的一个事件,客户端发出一个由用户在浏览器中创建的角色对象,由服务器保存。

在服务器端,在持久化之前需要进行一些验证,因此我创建了 Character 类以便将所有字符验证等保存在一个区域。

Character 有一个像这样的构造函数:

class Character():
  def __init__(self,stats=None,strength=0,stamina=0,armor=0,agility=0,charisma=0,health=0,lowAttack=0,highAttack=0,attack=0,ability_points=16,characterName=""):
    if stats is None:
        stats = ['strength','stamina','armor','agility','charisma']
    self.stats = stats
    self.strength = strength
    self.stamina = stamina
    self.armor = armor
    self.agility = agility
    self.charisma = charisma
    self.health = health
    self.lowAttack = lowAttack
    self.highAttack = highAttack
    self.attack = attack
    self.ability_points = ability_points
    self.characterName = ""

这是服务器第一次以字典的形式接收数据时的样子:

{'stats': ['strength','charisma'],'strength': 1,'stamina': 0,'armor': 0,'agility': 0,'charisma': 0,'health': 0,'lowAttack': 0,'highAttack': 0,'attack': 0,'ability_points': 15,'characterName': 'Buck County'}

在这个例子中可能很难注意到,但是这个 dicts 值与 Character 类的构造函数中的默认值不同,例如:

'strength': 1
'characterName': 'Buck County'
'ability_points': 15

上面最重要的是 'characterName': 'Buck County'

理想情况下,我接下来要做的是将其转换为类的一个实例,以便执行我创建的所有验证,然后只需使用 instance.__dict__ 将其持久化。

现在,根据我阅读的有关拆包的内容,这就是我正在做的事情:

newCharacter = Character(**character)
print(newCharacter.__dict__)

这是上面打印的内容:

{'stats': ['strength','characterName': ''}

因此,下面我将打印出从客户端发送到服务器的 dict 与 dict 解包后属于该类的 dict进入

{'stats': ['strength','characterName': 'Buck County'}

{'stats': ['strength','characterName': ''}

您可以在比较中非常清楚地看到,唯一未正确解压缩的值是名称。相反,它导致默认值“”

我是 Python 新手,有 Java / JS 背景。任何建议将不胜感激。谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)