Я ищу что-то очень похожее на namedtuples
:
>>> from collections import namedtuple
>>> Party = namedtuple('Party', ['guests', 'location'])
>>> p = Party(['Jed', 'Fred', 'Kathy'], "Steve's House")
вокруг которого я использую класс-оболочку, чтобы добавить расширяемость:
>>> class Party(namedtuple('Party', ['guests', 'location'])):
...
но с двумя отличиями. Я хотел бы, чтобы поля были изменяемыми, и я хотел бы, чтобы наследование работало. (Сейчас я не думаю, что есть способ наследовать один namedtuple от другого).
Я слышал о types.SimpleNamespace
, но я не думаю, что он допускает позиционные аргументы при создании (кто-то поправит меня, если я ошибаюсь). Мне нравятся namedtuples, потому что они избавляют меня от необходимости писать __init__
, __repr__
и __eq__
, которые мне нужны для моего варианта использования.
Что для меня важно: встроенные реализации __init__
, __repr__
и __eq__
, чтобы мне не приходилось писать их самому. Мне понадобится много (30+) определений этих классов, и некоторые из них будут иметь много (15+) полей.
Что для меня не важно (сейчас): эффективность памяти. Я не планирую иметь более пятисот таких экземпляров одновременно.
Я подумываю о своем собственном, но хочу убедиться, что не изобретаю велосипед заново.
__slots__
вclass Party
? - person chepner   schedule 03.08.2015namedtuple
, какие точные качества вы ищете? Если это проблема с местом, то @chepner предлагает использовать__slots__
. хороший. - person jonrsharpe   schedule 03.08.2015__eq__
,__repr__
и__init__
. Он не должен быть хешируемым или подклассомtuple
. - person Eli Rose   schedule 03.08.2015__repr__
и__init__
для каждого из них. Итак, для меня важен объем кода, который требуется для определения класса. - person Eli Rose   schedule 03.08.2015namedtuple
. и заимствовать то, что вам нужно от этого. - person jonrsharpe   schedule 03.08.2015namedtuple
), если вы попытаетесь создать экземпляр, не предоставив их все. - person Eli Rose   schedule 03.08.2015__eq__
и т. д., тогда каждый из ваших реальных классов будет его экземпляром, который просто предоставляет имена атрибутов этого класса. - person Tom Dalton   schedule 03.08.2015__init__
,__repr__
и__eq__
. - person Eli Rose   schedule 03.08.2015