Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Saya Boleh Mencipta Subkelas Kamus Teguh dan Fleksibel dengan Kekunci Huruf Kecil Menggunakan Kelas Asas Abstrak?

Bagaimanakah Saya Boleh Mencipta Subkelas Kamus Teguh dan Fleksibel dengan Kekunci Huruf Kecil Menggunakan Kelas Asas Abstrak?

Susan Sarandon
Susan Sarandonasal
2024-11-24 03:49:09933semak imbas

How Can I Create a Robust and Flexible Dictionary Subclass with Lowercase Keys Using Abstract Base Classes?

Melaksanakan Subkelas Dict "Sempurna" dengan ABC

Dalam artikel ini, kami meneroka cara mencipta subkelas yang disesuaikan bagi dict yang berkelakuan ideal dalam pelbagai senario.

Cabarannya

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.

Mengatasi Kaedah Manipulasi Utama

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.

Transformasi Minimum dengan ABC

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

Logik Transformasi Utama

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()

Warisan dan Sambungan

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__

Pickling and Beyond

'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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn