Je veux écrire une classe personnalisée qui se comporte comme dict
- donc, j'hérite d' dict
.
Ma question, c'est: Dois-je créer un privé dict
membre dans ma __init__()
méthode?. Je ne vois pas l'intérêt de ce, puisque j'ai déjà l' dict
comportement, si je hériter de dict
.
Quelqu'un peut-il point de savoir pourquoi la plupart de l'héritage des extraits de ressembler à celle ci-dessous?
class CustomDictOne(dict):
def __init__(self):
self._mydict = {}
# other methods follow
Au lieu de la simple...
class CustomDictTwo(dict):
def __init__(self):
# initialize my other stuff here ...
# other methods follow
En fait, je pense que je soupçonne que la réponse à la question est de sorte que les utilisateurs ne peuvent pas accéder directement à votre dictionnaire (c'est à dire qu'ils ont à utiliser les méthodes d'accès que vous avez fournie).
Cependant, qu'en est l'opérateur d'accès au tableau []
? Comment pourrait-on la mettre? Jusqu'à présent, je n'ai pas vu un exemple qui montre comment remplacer l' []
de l'opérateur.
Donc, si un []
accès à la fonction n'est pas fournie dans la classe personnalisée, l'héritage de la base de méthodes d'exploitation sur un autre dictionnaire?
J'ai essayé le code suivant pour tester ma compréhension de Python héritage:
class myDict(dict):
def __init__(self):
self._dict = {}
def add(self, id, val):
self._dict[id] = val
md = myDict()
md.add('id', 123)
print md[id]
J'ai eu l'erreur suivante:
KeyError: < intégré dans la fonction id>
Quel est le problème avec le code ci-dessus?
Comment puis-je corriger la classe myDict
, de sorte que je peux écrire du code comme celui-ci?
md = myDict()
md['id'] = 123
[Modifier]
J'ai édité l'exemple de code ci-dessus pour se débarrasser de la bête erreur que j'ai faite avant de m'enfuie de mon bureau. C'était une faute de frappe (j'aurais repéré à partir du message d'erreur).