제목이 너무 잘못되었거나 오해하지는 않았 으면합니다. 나는이 이름의 것이 무엇인지에 대해 확신 할 수 없다.반환하기 전에 서브 클래스의 생성자에 인스턴스 래핑
기본적으로 사전 (예 : defaultdict
및 OrderedDict
)을 사용하여 많은 작업을 해오 고 있으며이 기능 중 일부를 수행하는 몇 가지 도우미 기능을 수행하려고합니다. 여전히 여러 가지 유형의 사전에 걸쳐 작동합니다. 이상적으로, 나는 이것을 (즉, 어느 정도의 최적화로) 신속하게 그리고 물론 우아하게하고 싶습니다. 이 잘 작동
def filter_dict(old_dict, keep_keys):
return {k:v for k,v in old_dict.items() if k in keep_keys}
하지만 old_dict
은 기본 사전 이외의 경우, 그 잃을 : 여기에 내가 지금 무엇을의 예입니다. 좋아
는, 그래서 old_dict의 클래스의 생성자에서 새로 만든 사전을 래핑하는 type(old_dict)({.....})
뭔가를 할 수 있지만 여전히 첫 번째 인수 기본 값을 반환하는 함수로 을 defaultdicts, 작동하지 않습니다. 두 번째 인수 인 경우 *args
또는 무언가를 생성자에 전달할 수 있지만 상황이 복잡합니다.
제 질문은 짐작합니다. 생성자에 부분적으로 응용 프로그램을 가져올 수 있습니까? 나는 그 인스턴스의 용기를 얻고 items
을 제외한 모든 것을 그대로 가지고 클래스 생성자를 호출 할 수 있습니까? 하스켈에서 나는 reverse = lambda f, x, *args: f(*args, x)
과 같은 것을 할 것입니다. 그러나 그것은 파이썬에서도 허용되지 않습니다.
무엇이 누락 되었습니까? 수업에 대한 내성? __new__
로 팅겨 보고요? 공장 ... 무언가? 나는 꽤 무언가를 얻으려고 여기에서 벙어리 감각이 있지만 기능적이다.
사전 통찰력에 감사드립니다.
그래, 나는 이것을 확실히 고려했다. 그러나 그것은 정말로 ... brutish로 보인다? 그리고 반성, 클래스 레이아웃 등으로 들어가기 위해 노력한 이래로 좋은 학습 기회라고 생각합니다. 다른 모든 것이 실패하면 keep_keys 또는 k가 아닌 경우 delc와 함께 deepcopy를 반환 할 수 있습니다. 일부. 응답 해 주셔서 감사합니다. –
나는 우아함에 대한 당신의 욕구를 이해하지만 명확성 및/또는 기능 대신에 객체 지향 디자인을 자신의 목적으로하지 말라고주의하겠습니다. 복사 생성자는 원하는 것과 거의 동일하게 수행합니다. 이전 객체와 동일한 데이터로 새 객체를 초기화합니다. 개인적으로는 __new__ 등의 미묘한 트릭을 사용하여 코드를 읽는 것이 어렵지 만 때로는 필요한 경우도 있습니다. – cxrodgers