【发布时间】:2019-06-19 21:45:22
【问题描述】:
所以我有一个名为 charge 的方法,它以总计作为参数。当我打印出总计print(total) 时,它给了我Price(currency='INR', excl_tax=Decimal('1000.00'), incl_tax=Decimal('1180.0000'), tax=Decimal('180.0000'))。我如何访问让我们说 incl_tax ?
views.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)
facade.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
prices.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)。最好的方法是什么?
【问题讨论】:
-
你在哪里定义
incl_tax? -
我的理解是 total 是一个价格对象,而 incl_tax 是一个十进制字段,所以创建一个价格对象并使用 price.incl_tax 找到它的值
-
incl_tax 在另一个文件中名为 Price 的类中定义。但是,我的问题是在方法 charge 中访问 Price 对象的这个十进制字段。
-
您应该提供minimal reproducible example,但您可能只需要
total.incl_tax? -
好的,那么什么不起作用?您可以使用
.运算符访问对象的属性,所以就像我说的,您可能只需要total.incl_tax
标签: python oop data-structures