Şöyle davranan özel bir sınıf yazmak istiyorum dict
- yani, miras alıyorum dict
.
Sorum şu: Yöntemimde özel bir dict
üye oluşturmam gerekir __init__()
mi? Bunun anlamını anlamıyorum, çünkü dict
sadece miras alırsam zaten davranışa sahibim dict
.
Miras parçacıklarının çoğunun neden aşağıdakine benzediğini kimse söyleyebilir mi?
class CustomDictOne(dict):
def __init__(self):
self._mydict = {}
# other methods follow
Daha basit yerine ...
class CustomDictTwo(dict):
def __init__(self):
# initialize my other stuff here ...
# other methods follow
Aslında, sorunun cevabının kullanıcıların doğrudan sözlüğünüze erişememesi için (yani sizin sağladığınız erişim yöntemlerini kullanmaları gerektiğinden) şüpheleniyorum.
Ancak dizi erişim operatörü ne olacak []
? Bunu nasıl uygularsınız? Şimdiye kadar, []
operatörün nasıl geçersiz kılınacağını gösteren bir örnek görmedim .
Öyleyse []
, özel sınıfta bir erişim işlevi sağlanmazsa, miras alınan temel yöntemler farklı bir sözlükte çalışacak mı?
Python kalıtım anlayışımı test etmek için aşağıdaki parçacığı denedim:
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]
Aşağıdaki hatayı aldım:
KeyError: <yerleşik işlev kimliği>
Yukarıdaki kodda yanlış olan ne?
Böyle bir myDict
kod yazabilmek için sınıfı nasıl düzeltirim ?
md = myDict()
md['id'] = 123
[Düzenle]
Masamdan ayrılmadan önce yaptığım aptalca hatadan kurtulmak için yukarıdaki kod örneğini düzenledim. Bir yazım hatasıydı (hata mesajından fark etmeliydim).
dict
nesnenin kendisini (kullanaraksuper
) kullanmalısınız__dict__
- bu, esasen her örnek için iki dikt oluşturduğunuz anlamına gelir.