【发布时间】:2016-05-23 18:17:46
【问题描述】:
我是 python/Django 的新手。请帮我解决这个问题。 我正在尝试实例化这些类属性,但我无法做到。
这是我的课
class PricingContext(object):
def __init__(self, order=None, availability=False):
self.order = order
self.availability = availability
@property
def available_suites(self):
if self.availability:
availability = calculate_available_suites(self.order)
return availability
@property
def price_codes(self):
return self.order.get('price_codes')
@property
def purchased_date(self):
return self.order.order_items[0].get('purchased_date')
@property
def suite_type(self):
return self.order.order_items[0]['item_name']
我正在尝试像这样实例化
context_obj = PricingContext(context, availability)
eval(self.discount_function, None, context_obj)
假设self.discount = "'PRICE_CODE' in context_obj.price_codes"
但是在这里,它抛出了这个错误。 TypeError: locals must be a mapping
如果我尝试传递 context_obj.__dict__ 那么它只会实例化 self.order 和 self.availability 因为它们在 init
中被提及我希望在不初始化 init 的情况下实例化所有这些属性,因为它不适合我的用例。 我只想在 eval() 需要时调用每个属性。
让我知道是否有可能或有办法做到这一点。 提前感谢您的帮助。我将不胜感激。
【问题讨论】:
-
这听起来不是个好主意。为什么需要将折扣函数存储为字符串?
-
@DanielRoseman eval 以字符串形式占用第一个参数。所以,这里的 discount_function 是一个规则,它根据第三个参数中传递的 dict 进行评估。
-
我不是这个意思。你为什么要使用 eval 呢?避免它几乎总是更好。
-
@DanielRoseman 另一种方法是什么?请告诉我如何解决它
-
我正在尝试使用它来评估将由用户输入的输入表达式。所以我想为用户提供多个选项来定义该规则。有没有更好的方法?
标签: python class dictionary eval python-internals