首页 > 解决方案 > 如何在python中访问类对象属性

问题描述

所以我有一个名为charge的方法,它以 total 作为参数。当我打印出总计print(total)时,它给了我Price(currency='INR', excl_tax=Decimal('1000.00'), incl_tax=Decimal('1180.0000'), tax=Decimal('180.0000'))。我如何访问让我们说 incl_tax ?

视图.py

class PaymentDetailsView(CorePaymentDetailsView):


    def handle_payment(self, order_number, total, **kwargs):

        razorpay_ref = Facade().charge(
            order_number,
            total,
            card=self.request.POST[RAZORPAY_TOKEN],
            description=self.payment_description(order_number, total, **kwargs),
            metadata=self.payment_metadata(order_number, total, **kwargs))

        source_type, __ = SourceType.objects.get_or_create(name=PAYMENT_METHOD_RAZORPAY)
        source = Source(
            source_type=source_type,
            currency=settings.RAZORPAY_CURRENCY,
            amount_allocated=total.incl_tax,
            amount_debited=total.incl_tax,
            reference=razorpay_ref)
        self.add_payment_source(source)

        self.add_payment_event(PAYMENT_EVENT_PURCHASE, total.incl_tax)

门面.py

class Facade(object):
    def __init__(self):
        pass

    @staticmethod
    def get_friendly_decline_message(error):
        return 'The transaction was declined by your bank - please check your bankcard details and try again'

    @staticmethod
    def get_friendly_error_message(error):
        return 'An error occurred when communicating with the payment gateway.'

    def charge(self,
        order_number,
        total,
        card,
        currency=settings.STRIPE_CURRENCY,
        description=None,
        metadata=None,
        **kwargs):

        print("card")
        print(card)
        print("total")
        print(total)
        print(type(total))
        # print(getattr(self, 'incl_tax'))
        client = razorpay.Client(auth=("key", "pass"))
        client.payment.capture(card, total)
        return card

价格.py

class TaxNotKnown(Exception):
    """
    Exception for when a tax-inclusive price is requested but we don't know
    what the tax applicable is (yet).
    """


class Price(object):
    """
    Simple price class that encapsulates a price and its tax information
    Attributes:
        incl_tax (Decimal): Price including taxes
        excl_tax (Decimal): Price excluding taxes
        tax (Decimal): Tax amount
        is_tax_known (bool): Whether tax is known
        currency (str): 3 character currency code
    """

    def __init__(self, currency, excl_tax, incl_tax=None, tax=None):
        self.currency = currency
        self.excl_tax = excl_tax
        if incl_tax is not None:
            self.incl_tax = incl_tax
            self.is_tax_known = True
        elif tax is not None:
            self.incl_tax = excl_tax + tax
            self.is_tax_known = True
        else:
            self.incl_tax = None
            self.is_tax_known = False

    def _get_tax(self):
        return self.incl_tax - self.excl_tax

    def _set_tax(self, value):
        self.incl_tax = self.excl_tax + value
        self.is_tax_known = True

    tax = property(_get_tax, _set_tax)

    def __repr__(self):
        if self.is_tax_known:
            return "%s(currency=%r, excl_tax=%r, incl_tax=%r, tax=%r)" % (
                self.__class__.__name__, self.currency, self.excl_tax,
                self.incl_tax, self.tax)
        return "%s(currency=%r, excl_tax=%r)" % (
            self.__class__.__name__, self.currency, self.excl_tax)

    def __eq__(self, other):
        """
        Two price objects are equal if currency, price.excl_tax and tax match.
        """
        return (self.currency == other.currency and
                self.excl_tax == other.excl_tax and
                self.incl_tax == other.incl_tax)

我的目标是提取 incl_tax 这应该是一个整数值,所以我可以将它传递给client.payment.capture(card,total). 最好的方法是什么?

标签: pythonoopdata-structures

解决方案


您可以使用以下内容访问该列表中的元素,其中 2 是 的值incl_tax

print(total[2])


推荐阅读