
Steve D'Aprano wrote
Zaur Shibzukhov wrote
class frozendict(dict): This violates the Liskov Substitution Principle. https://en.wikipedia.org/wiki/Liskov_substitution_principle
and so, Steve said, we should not make frozendict a subclass of dict. Perhaps Zaur was thinking of Don't Repeat Yourself (DRY) https://en.wikipedia.org/wiki/Don%27t_repeat_yourself Certainly, by writing class frozendict(dict): # methods Zaur was able to use unchanged superclass methods such as __init__ and __getitem__, and also to delegate most of __str__ to the superclass. I see much merit in both https://en.wikipedia.org/wiki/Liskov_substitution_principle https://en.wikipedia.org/wiki/Don%27t_repeat_yourself I wonder whether, in pure Python, we can nicely have them both, when we implement frozenset. The best I can come up with is (not tested) is class frozendict: __slots__ = ('_self',) def __init__(self, *argv, **kwargs): self._self = dict(*argv, **kwargs) def __getitem__(self, key): return self._self.__getitem__(key) # And so on. -- Jonathan