명명 된 튜플을 확장하거나 서브 클래스화할 수있는 많은 추가 @properties가 있습니까?
몇 가지 경우 아래에 텍스트를 쓸 수 있습니다. 하지만 많은, 그래서 나는 발전기 또는 속성 공장을 찾고 있어요. 한 가지 방법은 _fields
에서 텍스트를 생성하고 exec하는 것입니다. 다른 것은 런타임에 동일한 효과가있는 add_fields입니다.
(내 @props는 그렇게 rec.pname
이 persontable[rec.personid].pname
즉, 데이터베이스에 여러 테이블에 걸쳐 흩어져 행과 필드를 얻을 수 있습니다; 하지만 namedtuples - 스마트 필드와 다른 것도 사용합니다.)많은 @properties가있는 파이썬 namedtuple을 확장합니까?
""" 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
당신이 당신의 자신의 질문에 대답하지 않았다? –
나는 그 질문을 이해하지 못한다. 어쩌면 튜플에 속성을 표시하고 싶습니까? 원하는 경우 getitem을 덮어 씁니다. – Pepijn
나는 혼란 스럽다. 당신은 당신이 요구하는 효과를 얻으려면 정확히 무엇을 해야하는 것처럼 보입니다. 무슨 문제 있니? 20 개 필드 지금 당신이 질문을 업데이트했는지 – Omnifarious