1

好的。

所以我有一个数据库,我想在其中存储对其他 Python 对象的引用(现在我正在使用存储啤酒配方成分的个人商店的库存信息)。

由于大约有 15-20 种不同类别的成分(全部由单独的 SQLObjects 表示),我不想做一堆 RelatedJoin 列,因为我很懒,而且看起来它不是“最好的”或“pythonic”解决方案原样。

所以现在我正在这样做:

class Inventory(SQLObject):
    inventory_item_id = IntCol(default=0)
    amount = DecimalCol(size=6, precision=2, default=0)
    amount_units = IntCol(default=Measure.GM)
    purchased_on = DateCol(default=datetime.now())
    purchased_from = UnicodeCol(default=None, length=256)
    price = CurrencyCol(default=0)
    notes = UnicodeCol(default=None)
    inventory_type = UnicodeCol(default=None)

    def _get_name(self):
        return eval(self.inventory_type).get(self.inventory_item_id).name

    def _set_inventory_item_id(self, value):
        self.inventory_type = value.__class__.__name__
        self._SO_set_inventory_item_id(value.id)

请注意eval()_get_name() 方法中的 ICKY。

__class__.__name__我将如何在不使用的情况下调用我从中获取的字符串引用的 SQLObject 类eval()?或者这是一个合适的地方使用eval()?(我有点不适合使用它的心态eval()——但是,由于系统从不使用任何最终用户输入,eval()它似乎“安全”。)

4

1 回答 1

3

通过名称获取全局值;采用:

globals()[self.inventory_type]
于 2011-12-12T01:39:23.100 回答