通过dict.key

时间:2018-11-28 07:22:00

标签: python

我创建了一个字典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的信息。因此,我尝试创建上述字典。

3 个答案:

答案 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']