Saya ingin menulis kelas khusus yang berperilaku seperti dict- jadi, saya mewarisi dari dict.
Pertanyaan saya, adalah: Apakah saya perlu membuat anggota pribadi dictdalam __init__()metode saya ?. Saya tidak mengerti maksudnya, karena saya sudah memiliki dictperilaku jika saya hanya mewarisi dict.
Adakah yang bisa menjelaskan mengapa sebagian besar cuplikan warisan terlihat seperti di bawah ini?
class CustomDictOne(dict):
def __init__(self):
self._mydict = {}
# other methods follow
Alih-alih yang lebih sederhana ...
class CustomDictTwo(dict):
def __init__(self):
# initialize my other stuff here ...
# other methods follow
Sebenarnya, saya rasa saya curiga jawaban dari pertanyaan tersebut adalah agar pengguna tidak dapat langsung mengakses kamus Anda (yaitu mereka harus menggunakan metode akses yang telah Anda sediakan).
Namun, bagaimana dengan operator akses array []? Bagaimana cara menerapkan itu? Sejauh ini, saya belum melihat contoh yang menunjukkan cara menimpa []operator.
Jadi jika []fungsi akses tidak disediakan di kelas kustom, metode dasar yang diwarisi akan beroperasi pada kamus yang berbeda?
Saya mencoba potongan berikut untuk menguji pemahaman saya tentang warisan 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]
Saya mendapat kesalahan berikut:
KeyError: <built-in function id>
Ada apa dengan kode di atas?
Bagaimana cara mengoreksi kelas myDictagar saya dapat menulis kode seperti ini?
md = myDict()
md['id'] = 123
[Sunting]
Saya telah mengedit contoh kode di atas untuk menghilangkan kesalahan konyol yang saya buat sebelum saya lari dari meja saya. Itu salah ketik (saya seharusnya melihatnya dari pesan kesalahan).
dict, maka Anda harus menggunakan objek itu sendiri (menggunakansuper) daripada hanya mendelegasikan ke instance__dict__- yang pada dasarnya berarti Anda membuat dua dicts untuk setiap instance.