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 인터페이스를 구현하면 다음과 같은 여러 이점이 있습니다.
사용 예
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
이 하위 클래스는 대소문자를 구분하지 않는 키 액세스를 허용하며 검색.
추가 참고 사항
위 내용은 사전의 동작을 완벽하게 재정의하는 데 추상 기본 클래스가 어떻게 도움이 될 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!