Quiero escribir una clase personalizada que se comporte como dict
- entonces, heredo de dict
.Una clase de python que actúa como dict
Mi pregunta, sin embargo, es: ¿Necesito crear un miembro privado dict
en mi método __init__()
?. No veo el sentido de esto, ya que ya tengo el comportamiento dict
si simplemente heredo de dict
.
¿Alguien puede señalar por qué la mayoría de los fragmentos de herencia se ven como el de abajo?
class CustomDictOne(dict):
def __init__(self):
self._mydict = {}
# other methods follow
En lugar de la simple ...
class CustomDictTwo(dict):
def __init__(self):
# initialize my other stuff here ...
# other methods follow
En realidad, creo que sospechar la respuesta a la pregunta es por lo que los usuarios no pueden acceder directamente a su diccionario (es decir, tienen que utilizar los métodos de acceso que has proporcionado).
Sin embargo, ¿qué pasa con el operador de acceso a la matriz []
? ¿Cómo podría uno implementar eso? Hasta ahora, no he visto un ejemplo que muestre cómo anular el operador []
.
Entonces, si no se proporciona una función de acceso []
en la clase personalizada, ¿los métodos base heredados operarán en un diccionario diferente?
He probado el siguiente fragmento de poner a prueba mi comprensión de la herencia de Python:
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]
tengo el siguiente error:
KeyError: < built-in function id>
Lo que está mal con el código anterior?
¿Cómo puedo corregir la clase myDict
para que pueda escribir código como este?
md = myDict()
md['id'] = 123
[Editar]
He editado el ejemplo de código anterior para deshacerse del error tonto que hice antes de que me lancé lejos de mi escritorio. Fue un error tipográfico (debería haberlo detectado en el mensaje de error).
estoy refiere a menudo como 'el programador que actúa como dict'. –
posible duplicado de [Python: Cómo "perfectamente" anular un dict] (http://stackoverflow.com/questions/3387691/python-how-to-perfectly-override-a-dict) –