我正在创建一个小型应用程序,在服务器端使用python中的socketio,在客户端使用JS。对于我的一个事件,客户端会发出一个字符对象,该对象是由用户在浏览器中创建的,将由服务器持久化。
在服务器端,在持久化之前需要进行一些验证,因此我创建了字符类,以便在一个区域内保持所有字符的有效性。
字符具有如下所示的构造函数:
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', 'stamina', 'armor', 'agility', '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值与字符类的构造函数中的默认值不同,例如:
'strength': 1
'characterName': 'Buck County'
'ability_points': 15最重要的是上面提到的 'characterName': 'Buck County'
理想情况下,我接下来要做的是将它转换为一个类的实例,以便执行我创建的所有验证,然后使用instance.__dict__来持久化它。
现在,这就是我根据我所读到的关于拆包的内容所做的事情:
newCharacter = Character(**character)
print(newCharacter.__dict__)下面是从上面打印出来的内容:
{'stats': ['strength', 'stamina', 'armor', 'agility', 'charisma'], 'strength': 1, 'stamina': 0, 'armor': 0, 'agility': 0, 'charisma': 0, 'health': 0, 'lowAttack': 0, 'highAttack': 0, 'attack': 0, 'ability_points': 15, 'characterName': ''}因此,下面我将打印出从客户机发送到服务器的dict,与属于该类的dict相比,dict已被解压缩到中。
{'stats': ['strength', 'stamina', 'armor', 'agility', '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'}
{'stats': ['strength', 'stamina', 'armor', 'agility', 'charisma'], 'strength': 1, 'stamina': 0, 'armor': 0, 'agility': 0, 'charisma': 0, 'health': 0, 'lowAttack': 0, 'highAttack': 0, 'attack': 0, 'ability_points': 15, 'characterName': ''}您可以在比较中非常清楚地看到,唯一未正确解压的值是名称。相反,它将导致默认值"“。
我是Python新手,来自Java / JS背景。如有任何建议,将不胜感激。谢谢
发布于 2021-01-12 08:29:59
我可能误解了这个问题,但在您的__init__中,您定义的是self.characterName = "",而不是self.characterName = characterName
https://stackoverflow.com/questions/65680272
复制相似问题