【发布时间】:2014-02-21 18:06:28
【问题描述】:
我有一些对象为应用程序保存恒定的数据库值,它们看起来像这样:
class TestObject(object):
"""reflects constants in _test_object"""
_pairs = (
( 1 , 'A' ),
( 2 , 'B' ),
( 4 , 'C' ),
( 8 , 'D' ),
)
mapping = setup(_pairs)
mapping 函数创建一个字典,它根据_pairs 为我提供 k,v 和 v,k 查找。它们都是“id,name”的形式。
为了让应用更简单,我也经常将“文本值”设置为属性:
class TestObject(object):
...
...
A = 1
B = 2
C = 4
D = 8
虽然这使得使用类非常棒,但重新输入所有内容并使其保持同步有点笨拙。另外,我必须编写单元测试以确保属性与 _pairs 中的正确 id 匹配。
我一直在尝试寻找一种方法来跳过将其写出来,而只是在应用程序启动时使用属性自动填充每个 TestObject 类。
我知道我可以重写该类并让它检查 _pairs/mapping 属性以进行故障转移,但我真的很感兴趣是否可以根据需要以编程方式填充该类。还没有__class__,因为尚未定义该类。
要明确一点,我想做的事情是这样的:
class NotValidPython():
_pairs = ((1,'A'),)
for (k,v) in _pairs:
setattr( __class__, v, k )
【问题讨论】: