Sebagai contoh mari kita asumsikan saya ingin subclass dictdan memiliki semua kunci dikapitalisasi:
class capdict(dict):
def __init__(self,*args,**kwds):
super().__init__(*args,**kwds)
mod = [(k.capitalize(),v) for k,v in super().items()]
super().clear()
super().update(mod)
def __getitem__(self,key):
return super().__getitem__(key.capitalize())
def __setitem__(self,key,value):
super().__setitem__(key.capitalize(),value)
def __delitem__(self,key):
super().__detitem__(key.capitalize())
Ini berfungsi sampai batas tertentu,
>>> ex = capdict(map(reversed,enumerate("abc")))
>>> ex
{'A': 0, 'B': 1, 'C': 2}
>>> ex['a']
0
tetapi, tentu saja, hanya untuk metode yang saya ingat untuk diterapkan, misalnya
>>> 'a' in ex
False
bukan perilaku yang diinginkan.
Sekarang, cara malas mengisi semua metode yang dapat diturunkan dari yang "inti" akan bercampur collections.abc.MutableMapping. Hanya saja, itu tidak berfungsi di sini. Saya kira karena metode yang dimaksud ( __contains__dalam contoh) sudah disediakan oleh dict.
Apakah ada cara mendapatkan kue dan memakannya? Beberapa sihir membiarkan MutableMappinghanya melihat metode yang telah saya timpa sehingga itu meningkatkan yang lain berdasarkan itu?
os._Environ.
MutableMapping. Lihat kamus case-sensitive .