source = {'livemode': False}
。我认为可以通过source.livemode
访问livemode值。但它不起作用。有没有办法通过这种方式访问它?
由于非source['livemode']
有效,但我需要source.livemode
,因为它已经在我的代码中使用过了,我必须将其作为Stripe返回值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
我可以使用例如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,
}
现在有一种情况(当订单为Free时(,我必须"跳过"_create_charge
函数,但仍然必须发送有关charge_or_source.livemode
的信息。因此,我试图创建上述词典。
我自己也是个初学者,但让我试着回答:
假设你有一本字典:
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访问慢一点,但如果你真的想,你可以使用这种方法访问所有带点的键。
您可以实现自定义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)
访问字典的正确方法是如何提出它:
source['livemode']