Настраиваемое травление класса кортежей на Python - PullRequest
0 голосов
/ 17 января 2020

У меня есть класс Record, который ссылается на запись базы данных по ее первичному ключу, идентификатору и хранит некоторую кэшированную информацию.

    class Record:
        def __init__( self, id ):
            self.id = id
            self.various_cached_info = spam

У меня также есть класс RecordCollection, который является кортеж из Records.

    from typing import Tuple, TypeVar

    TRecord = TypeVar( "TRecord", bound = Record )

    class RecordCollection( Tuple[TRecord, ...] ):
        pass

Теперь, , когда я выбираю RecordCollection, как я могу изменить этот класс, чтобы выбрать только идентификаторы (как список ints )?

Я пытался:

  • изменить Record.__getstate__, чтобы просто включить идентификатор и сбросить кэшированную информацию. Это помогает, но RecordCollection по-прежнему выбирает имя-типа"Record" для каждого отдельного элемента в массиве.
  • , изменяя RecordCollection.__getstate__, чтобы включить только список идентификаторов, но что-то позади капота травит часть tuple в другом месте.
    import json
    import jsonpickle

    a = Record( 1 )
    b = Record( 2 )
    c = Record( 3 )

    l = RecordCollection( (a, b, c) )

    print( json.dumps( json.loads( jsonpickle.dumps( l ) ), indent = 4 ) )
...