变量名可以是python的关键字_python – 如何使用关键字作为变量名?

正如评论中所提到的,from是一个Python关键字,因此您不能将其用作变量名称或属性名称.因此,您需要使用替代名称,并在读取或写入JSON数据时执行转换.

要进行输出转换,可以为json.dumps提供新的编码器;你可以通过重写ExchangeRates.json方法来做到这一点.要执行输入转换,请覆盖ExchangeRates.from_json.

在两种情况下策略都类似:我们创建字典的副本(因此我们不会改变原始字典),然后我们创建一个具有所需名称和值的新密钥,然后删除旧密钥.

这是一个快速演示,在Python 2.6和3.6上测试过:

import json

class PropertyEquality(object):

def __eq__(self, other):

return (isinstance(other, self.__class__) and self.__dict__ == other.__dict__)

def __ne__(self, other):

return not self.__eq__(other)

def __repr__(self):

return '%s(%s)' % (self.__class__.__name__, ', '.join(['%s=%s' % (k, v) for (k, v) in self.__dict__.items()]))

class JsonAware(PropertyEquality):

def json(self):

return json.dumps(self, cls=GenericEncoder)

@classmethod

def from_json(cls, json):

return cls(**json)

class ExchangeRatesEncoder(json.JSONEncoder):

def default(self, obj):

d = obj.__dict__.copy()

d['from'] = d['frm']

del d['frm']

return d

class ExchangeRates(JsonAware):

def __init__(self, frm, to, rate):

self.frm = frm

self.to = to

self.rate = rate

def json(self):

return json.dumps(self, cls=ExchangeRatesEncoder)

@classmethod

def from_json(cls, json):

d = json.copy()

d['frm'] = d['from']

del d['from']

return cls(**d)

# Test

a = ExchangeRates('a', 'b', 1.23)

print(a.json())

jdict = {"from": "z", "to": "y", "rate": 4.56, }

b = ExchangeRates.from_json(jdict)

print(b.json())

典型输出

{"from": "a", "to": "b", "rate": 1.23}

{"from": "z", "to": "y", "rate": 4.56}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值