- 论坛徽章:
- 1
|
本帖最后由 tianshizhiluan 于 2010-08-23 16:42 编辑
恩,已经实现了,我写了个通用的函数to_obj(有点函数式编程的意思),可以用来完成所有类似的功能,当然还是那样:动态生成。下面是代码。感谢 """ luffy.deng """
新问题:对于一个大的dict,需要调用很多次type来生成类,我不知道这样是不是会导致性能降低很多,或者可以找到一个更好的方法来解决这个问题?谁有解决方案吗?请上代码。谢谢- #! /usr/bin/env python
- import types
- foo = {'a': 1,
- 'b': 2,
- 'c': {'a': 22,
- 'b': 23
- }
- }
- def test_key(d):
- return isinstance(d, types.IntType)
- class Data(object):
- def __init__(self, value):
- self._value = value
- pass
- def __get__(self, obj, type=None):
- return self._value + 2
- pass
- def to_obj(dct, test_key, descriptor):
- x = type('xo0pP', (object,), dict())
- for key in dct.keys():
- if test_key(dct[key]):
- setattr(x, key, descriptor(dct[key]))
- pass
- else:
- setattr(x, key, to_obj(dct[key], test_key, descriptor))
- pass
- pass
- return x
- if __name__ == "__main__":
- x = to_obj(foo, test_key, Data)
- print x.a # 3
- print x.c.b # 25
复制代码 |
|