UserDict, UserList și UserString în Python

Modulul collections Python 3.0+

Clase de bază ușor de extins pentru dicționare, liste și texte cu comportament propriu.

Sintaxă
from collections import UserDict, UserList, UserString
class MeuDict(UserDict): ...

Ce face UserDict, UserList și UserString

Când moștenești direct dict sau list, unele metode încorporate (update, get, constructorul) nu apelează metodele tale suprascrise, ceea ce produce surprize. UserDict, UserList și UserString sunt scrise în Python și apelează consecvent metodele tale.

Datele propriu-zise sunt în atributul data (un dict, o list sau un str).

Parametri

Parametru Descriere
dict / initlist / seq Datele inițiale.

Ce returnează

Un obiect de tipul respectiv.

Exemple

Exemplul 1: Dicționar cu chei mereu cu litere mici

from collections import UserDict, UserList, UserString

class DictMinuscule(UserDict):
    def __setitem__(self, cheie, valoare):
        super().__setitem__(cheie.lower(), valoare)

d = DictMinuscule({"Nume": "Ana"})
d.update(ORAS="Iași")
print(d, d.data)

class ListaPozitiva(UserList):
    def append(self, x):
        if x < 0:
            raise ValueError("doar valori pozitive")
        super().append(x)

l = ListaPozitiva([1, 2])
l.append(3)
print(l)
print(UserString("text").upper())

Rezultat

{'nume': 'Ana', 'oras': 'Iași'} {'nume': 'Ana', 'oras': 'Iași'}
[1, 2, 3]
TEXT

Greșeli frecvente

  • Moștenești dict și suprascrii __setitem__, apoi te miri că update() sau dict(...) îl ocolesc. Folosește UserDict.

Comenzi înrudite

  • class: Definește o clasă: un șablon pentru obiecte care au date (atribute) și comportament (metode).
  • dict (dicționare): Dicționarul păstrează perechi cheie: valoare și găsește rapid valoarea după cheie.
  • super(): Apelează metoda clasei părinte dintr-o clasă care o moștenește.