Dalam artikel ini, kami meneroka cara mencipta subkelas yang disesuaikan bagi dict yang berkelakuan ideal dalam pelbagai senario.
Matlamat kami adalah untuk membina subkelas 'dikt' di mana kunci sentiasa dalam huruf kecil. Tugasan yang kelihatan mudah ini memerlukan kita untuk mengatasi kaedah tertentu dengan berhati-hati.
Untuk mencapai gelagat utama yang diingini, kita perlu mengatasi '__getitem__', '__setitem__' dan ' __delitem__' kaedah. Dengan menyesuaikan kaedah ini, kami boleh memintas interaksi utama dan menguatkuasakan transformasi huruf kecil.
Daripada subkelas terus 'dikt', kami boleh memanfaatkan ABC (Kelas Asas Abstrak) daripada modul 'collections.abc'. Pendekatan ini menawarkan pelaksanaan yang lebih bersih dan mantap.
Dengan melaksanakan ABC 'MutableMapping', kami memastikan pematuhan dengan antara muka dict. Coretan kod berikut menyediakan pelaksanaan minimum kamus kami yang diubah:
from collections.abc import MutableMapping class TransformedDict(MutableMapping): def __init__(self, *args, **kwargs): self.store = dict() self.update(dict(*args, **kwargs)) def __getitem__(self, key): return self.store[self._keytransform(key)] def __setitem__(self, key, value): self.store[self._keytransform(key)] = value def __delitem__(self, key): del self.store[self._keytransform(key)] def __iter__(self): return iter(self.store) def __len__(self): return len(self.store) def _keytransform(self, key): return key
Kaedah '_keytransform' bertanggungjawab untuk menggunakan transformasi yang diingini pada kekunci. Dalam kes kami, ia hanya mengembalikan kunci dalam huruf kecil:
def _keytransform(self, key): return key.lower()
Untuk menggunakan kamus kami yang diubah, kami boleh mensubkelaskan 'TransformedDict' dan menentukan perubahan kunci yang diingini dalam kaedah '_keytransform'. Contohnya:
class MyTransformedDict(TransformedDict): def _keytransform(self, key): return key.lower() s = MyTransformedDict([('Test', 'test')]) assert s.get('TEST') is s['test'] # free get assert 'TeSt' in s # free __contains__
'TransformedDict' yang dilaksanakan berfungsi dengan jeruk, berkat pergantungannya pada dict standard secara dalaman.
Adalah penting untuk ambil perhatian bahawa subkelas 'dikt' secara langsung tidak disyorkan, kerana ia boleh membawa kepada tingkah laku yang tidak dijangka. Dengan menggunakan ABC, kami boleh mencipta subkelas yang teguh dan fleksibel yang mematuhi antara muka yang diingini, dalam kes ini, iaitu 'MutableMapping.'
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencipta Subkelas Kamus Teguh dan Fleksibel dengan Kekunci Huruf Kecil Menggunakan Kelas Asas Abstrak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!