我创建了一个字典source = {'livemode': False}
。我认为可以通过source.livemode
访问livemode值。但这是行不通的。有没有办法以这种方式访问它?
由于source['livemode']
不能正常工作,但是我需要source.livemode
,因为我的代码中已经使用了charge
,我必须处理它,以作为Stripe返回值def _create_charge(self, request, order_reference, order_items_dict, token):
try:
charge = stripe.Charge.create(
amount=order_items_dict['total_gross'],
application_fee=order_items_dict['application_fee'],
currency=order_items_dict['event'].currency,
source=token,
stripe_account=order_items_dict['event'].organizer.stripe_account,
expand=['balance_transaction', 'application_fee'],
)
except stripe.error.StripeError as e:
body = e.json_body
err = body.get('error', {})
messages.error(
request,
err.get('message')
)
else:
if charge.paid and charge.status == 'succeeded':
return charge
的替代。 >
我想提供更多背景信息
在这里我通过Stripe创建费用:
charge_or_source.livemode
我可以通过例如def _create_order(self, request, charge_or_source, order_status):
order_reference = request.session.get('order_reference')
new_order = self.order_form.save(commit=False)
print(charge_or_source.livemode, "charge_or_source.livemode")
new_order_dict = {
'total_gross': self.order_items_dict['total_gross'],
'livemode': charge_or_source.livemode,
}
_create_charge
现在有一种情况(订购是免费的),我必须“跳过” charge_or_source.livemode
函数,但仍然必须发送有关ScheduledThreadPoolExecutor
的信息。因此,我尝试创建上述字典。
答案 0 :(得分:1)
您可以实现自定义dict
包装器(dict
的子类或包含dict
的东西)并实现__getattr__
(或__getattribute__
)从dict
返回数据。
class DictObject(object):
def __init__(self, data):
self.mydict = data
def __getattr__(self, attr):
if attr in self.mydict: return self.mydict[attr]
return super(self, DictObject).__getattr__(attr)
答案 1 :(得分:1)
我本人还是一个初学者,但让我尝试一下:
假设您有一本字典:
dictionary = {"One": 1, "Two": 2, "Three": 3}
您可以使用其键来创建一个类,例如:
class DictKeys:
One = 'One'
Two = 'Two'
Three = 'Three'
这里,一,二和三是类变量或属性,这意味着您是否要为此类创建对象:
key = DictKeys()
您可以使用'。'访问所有这些键。 (点)运算符。
key.One
>>'One'
现在只要将它插入您要访问字典的任何地方即可!
dictionary[key.One]
>>1
我确信这不是最好的方法,并且类访问比dict访问要慢一点,但是如果您确实愿意,可以使用此方法使用点来访问所有键。
答案 2 :(得分:0)
访问字典的正确方法是您提出的方式:
source['livemode']