Как лучше создать dict-like класс с составным ключом?

111

Задача в следующем:

  1. имеется класс, имеющий 4 свойства, 2 из которых "только для чтения"

  2. нужно создать второй класс (в каком-то роде dict-like), состоящий из последовательности экземпляров первого класса и в котором должен использоваться составной ключ из вышеупомянутых двух readonly-свойств. Как сделать это лучше?

Надеюсь, объяснил более или менее понятно

Пробовал сделать, реализовав для первого класса методы __eq__ и __hash__, а во втором хранил экземпляры первого класса во множестве. Примерно так: gist. Но мне не особо это нравится: создание множества, конечно, происходит по "составному ключу", но получить значение по этому ключу нельзя

Смотрел библиотеку collections, но тоже не нашёл подходящего

1 ответ

111

Решено было примерно так:

class Trp: def __init__(self, prefix, name, value, comment): self.prefix = prefix # readonly self.name = name # readonly self.value = value self.comment = comment
class TrpStr: def __init__(self, *trps): self._trps = {} for trp in trps: self._trps.update({(trp.prefix, trp.name): trp})

Решение, конечно, не идеальное

licensed under cc by-sa 3.0 with attribution.