如何将namedtuples扩展或使用许多其他@properties进行子类化?
对于少数人,可以只写下面的文字;但有很多, 所以我正在寻找一个发电机或物业工厂。 一种方法是从_fields
生成文本并执行它; 另一个是在运行时具有相同效果的add_fields。
(我@props是让行和字段 在数据库中分散在多个表, 使rec.pname
是persontable[rec.personid].pname
; 但namedtuples与 - 智能领域将有其他用途了。)用多个@properties扩展名为tuple的Python吗?
""" extend namedtuple with many @properties ? """
from collections import namedtuple
Person = namedtuple("Person", "pname paddr") # ...
persontable = [
Person("Smith", "NY"),
Person("Jones", "IL")
]
class Top(namedtuple("Top_", "topid amount personid")):
""" @property
.person -> persontable[personid]
.pname -> person.pname ...
"""
__slots__ =()
@property
def person(self):
return persontable[self.personid]
# def add_fields(self, Top.person, Person._fields) with the same effect as these ?
@property
def pname(self):
return self.person.pname
@property
def paddr(self):
return self.person.paddr
# ... many more
rec = Top(0, 42, 1)
print rec.person, rec.pname, rec.paddr
难道你不是在那里回答自己的问题吗? – 2010-02-03 15:36:19
我不明白这个问题。也许你想要属性显示在元组中?如果你想要的话,覆盖getitem。 – Pepijn 2010-02-03 15:42:28
我也很困惑。你似乎正在做你应该得到你所问的效果。你有什么问题? – Omnifarious 2010-02-03 15:51:59