추상 기본 클래스를 사용하여 소문자 키를 사용하여 강력하고 유연한 사전 하위 클래스를 어떻게 만들 수 있습니까?

Susan Sarandon
풀어 주다: 2024-11-24 03:49:09
원래의
868명이 탐색했습니다.

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

ABC를 사용하여 "완벽한" Dict 하위 클래스 구현

이 기사에서는 다양한 시나리오에서 이상적으로 작동하는 사전의 맞춤형 하위 클래스를 만드는 방법을 살펴봅니다.

도전

우리의 목표는 'dict'의 하위 클래스를 구성하는 것입니다. 키는 항상 소문자입니다. 단순해 보이는 이 작업에서는 특정 메서드를 신중하게 재정의해야 합니다.

키 조작 방법 재정의

원하는 키 동작을 달성하려면 '__getitem__', '__setitem__' 및 ' __delitem__' 메소드. 이러한 방법을 사용자 정의함으로써 주요 상호 작용을 가로채고 소문자 변환을 시행할 수 있습니다.

ABC를 사용한 최소 변환

'dict'를 직접 서브클래스화하는 대신 다음에서 ABC(추상 기본 클래스)를 활용할 수 있습니다. 'collections.abc' 모듈. 이 접근 방식은 더욱 명확하고 강력한 구현을 제공합니다.

'MutableMapping' ABC를 구현하여 dict 인터페이스 준수를 보장합니다. 다음 코드 조각은 변환된 사전의 최소 구현을 제공합니다.

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
로그인 후 복사

키 변환 논리

'_keytransform' 메소드는 원하는 변환을 키에 적용하는 역할을 합니다. 우리의 경우에는 단순히 키를 소문자로 반환합니다.

def _keytransform(self, key):
    return key.lower()
로그인 후 복사

상속 및 확장

변형된 사전을 사용하려면 'TransformedDict'를 하위 클래스로 분류하고 원하는 키 변환을 '_keytransform' 방법. 예:

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'는 내부적으로 표준 사전에 의존하기 때문에 pickle과 함께 작동합니다.

다음이 중요합니다. 예상치 못한 동작이 발생할 수 있으므로 'dict'를 직접 서브클래싱하는 것은 일반적으로 권장되지 않습니다. ABC를 활용하면 원하는 인터페이스(이 경우에는 'MutableMapping')를 준수하는 강력하고 유연한 하위 클래스를 만들 수 있습니다.

위 내용은 추상 기본 클래스를 사용하여 소문자 키를 사용하여 강력하고 유연한 사전 하위 클래스를 어떻게 만들 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿