사전의 동작을 완벽하게 재정의하는 데 추상 기본 클래스가 어떻게 도움이 될 수 있습니까?

DDD
풀어 주다: 2024-11-23 16:20:30
원래의
160명이 탐색했습니다.

How Can Abstract Base Classes Help in Perfectly Overriding a Dictionary's Behavior?

Dict를 완벽하게 재정의하기: 추상 기본 클래스를 사용하는 가이드

내장 dict 유형의 하위 클래스를 생성할 때 완벽한 결과를 달성합니다. 구현이 어려울 수 있습니다. 전체 dict 클래스를 재정의하는 대신 collections.abc 모듈의 추상 기본 클래스(ABC)를 사용하는 대체 접근 방식을 채택하는 것이 좋습니다.

MutableMapping ABC 사용

MutableMapping ABC는 변경 가능한 사전처럼 동작하는 클래스에 대한 인터페이스를 제공합니다. 이 인터페이스를 구현하면 직접 서브클래싱하지 않고도 사전처럼 동작하는 객체를 생성할 수 있습니다. 다음은 최소한의 예입니다.

from collections.abc import MutableMapping

class TransformedDict(MutableMapping):
    def __init__(self, *args, **kwargs):
        self.store = dict()
        self.update(dict(*args, **kwargs))  # use the free update to set keys

    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 메소드를 통해 키를 조작하기 위한 기반을 제공합니다. 하위 클래스에서 이 메서드를 재정의하면 키에 사용자 지정 변환을 적용할 수 있습니다.

ABC 사용의 이점

MutableMapping 인터페이스를 구현하면 다음과 같은 여러 이점이 있습니다.

  • 완전성: ABC는 다음을 보장합니다. 변경 가능한 사전에 필요한 모든 메소드를 구현했습니다.
  • 자동 유효성 검사: ABC는 필수 메소드를 모두 구현했는지 확인하여 누락된 구현을 조기에 찾아낼 수 있습니다.
  • 내장 메소드: get, setdefault, pop 등과 같은 메소드를 구현하지 않고도 자동으로 액세스할 수 있습니다.

사용 예

TransformedDict의 하위 클래스를 생성하고 _keytransform 메서드를 정의하면 키 처리를 사용자 정의할 수 있습니다.

class MyTransformedDict(TransformedDict):
    def _keytransform(self, key):
        return key.lower()

s = MyTransformedDict([('Test', 'test')])
assert s.get('TEST') is s['test']
assert 'TeSt' in s
로그인 후 복사

이 하위 클래스는 대소문자를 구분하지 않는 키 액세스를 허용하며 검색.

추가 참고 사항

  • 피클링은 본질적으로 내부적으로 일반 사전을 사용하여 작업하므로 이 접근 방식과 원활하게 작동합니다.
  • 일반적으로 dict와 같은 내장 유형을 직접 하위 클래스로 분류하는 것은 권장되지 않습니다. 혼란과 예상치 못한 결과를 초래할 수 있기 때문입니다.
  • ABC를 사용하면 특정 인터페이스를 구현하는 객체를 생성하기 위한 깔끔하고 확장 가능한 솔루션이 제공됩니다.

위 내용은 사전의 동작을 완벽하게 재정의하는 데 추상 기본 클래스가 어떻게 도움이 될 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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