4
我试图将__dict__
成员添加到由namedtuple生成的类。 (__dict__
存在于蟒2.7.3,但在2.7.5中除去。参见http://bugs.python.org/issue15535它是目前和蟒3.3记载。)我的代码使用VARS(nametuple_object),它是基于__dict__
。我想在需要时修补课程。在Python中动态添加类__dict__属性
这是我曾尝试:
# Applies to Python 2.7.5 +
C = namedtuple('C', ['x', 'y'])
if not hasattr(C, '__dict__'):
C.__dict__ = property(C._asdict)
这不起作用,因为C继承了__dict__
,所以hasattr永远是真实的(强制时)财产转让收益:
Traceback (most recent call last):
File "namedtuple_dict.py", line 8, in <module>
C.__dict__ = property(C._asdict)
AttributeError: attribute '__dict__' of 'type' objects is not writable
也许,有没有办法引用未继承的C成员?
SOLUTION
下面是用从namedtuple类只是继承RDB的建议,而不是试图修改我的namedtuple包装:
def namedtuple_with_dict(typename, field_names, **kwargs):
C = CBase = namedtuple(typename, field_names, **kwargs)
if 0x02070500 <= sys.hexversion < 0x03000000:
C = type(typename, (CBase,), {'__dict__': property(CBase._asdict)})
return C
从'vars'切换到'_fields'的选项? – user2357112
我有一个非常相似的用例,但我的解决方案是将'__dict__'调用更改为'dict(zip(c._fields,c))',其中c是您的namedtuple实例。 – mtrovo