이 기사에서는 다양한 시나리오에서 이상적으로 작동하는 사전의 맞춤형 하위 클래스를 만드는 방법을 살펴봅니다.
우리의 목표는 'dict'의 하위 클래스를 구성하는 것입니다. 키는 항상 소문자입니다. 단순해 보이는 이 작업에서는 특정 메서드를 신중하게 재정의해야 합니다.
원하는 키 동작을 달성하려면 '__getitem__', '__setitem__' 및 ' __delitem__' 메소드. 이러한 방법을 사용자 정의함으로써 주요 상호 작용을 가로채고 소문자 변환을 시행할 수 있습니다.
'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__
구현된 'TransformedDict'는 내부적으로 표준 사전에 의존하기 때문에 pickle과 함께 작동합니다.
다음이 중요합니다. 예상치 못한 동작이 발생할 수 있으므로 'dict'를 직접 서브클래싱하는 것은 일반적으로 권장되지 않습니다. ABC를 활용하면 원하는 인터페이스(이 경우에는 'MutableMapping')를 준수하는 강력하고 유연한 하위 클래스를 만들 수 있습니다.
위 내용은 추상 기본 클래스를 사용하여 소문자 키를 사용하여 강력하고 유연한 사전 하위 클래스를 어떻게 만들 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!