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
Lepaskan: 2024-11-24 03:49:09
asal
879 orang telah melayarinya

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
Salin selepas log masuk

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()
Salin selepas log masuk

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__
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan