问题描述
我正在使用服务器端的 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 (将#修改为@)