首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python解压缩操作符而不是在构造函数中解压缩字符串

Python解压缩操作符而不是在构造函数中解压缩字符串
EN

Stack Overflow用户
提问于 2021-01-12 08:24:36
回答 1查看 50关注 0票数 0

我正在创建一个小型应用程序,在服务器端使用python中的socketio,在客户端使用JS。对于我的一个事件,客户端会发出一个字符对象,该对象是由用户在浏览器中创建的,将由服务器持久化。

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

字符具有如下所示的构造函数:

代码语言:javascript
复制
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 = ""

以下是数据第一次被服务器作为数据块接收时的样子:

代码语言:javascript
复制
{'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值与字符类的构造函数中的默认值不同,例如:

代码语言:javascript
复制
'strength': 1
'characterName': 'Buck County'
'ability_points': 15

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

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

现在,这就是我根据我所读到的关于拆包的内容所做的事情:

代码语言:javascript
复制
newCharacter = Character(**character)
print(newCharacter.__dict__)

下面是从上面打印出来的内容:

代码语言:javascript
复制
{'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已被解压缩到中。

代码语言:javascript
复制
{'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背景。如有任何建议,将不胜感激。谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-12 08:29:59

我可能误解了这个问题,但在您的__init__中,您定义的是self.characterName = "",而不是self.characterName = characterName

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65680272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档