파이썬에서 dict
과 같은 클래스를 만들려고합니다.클래스의 dict() 덮어 쓰기
클래스를 만들 때 Python에 내장 클래스를 만드는 방법을 알려주는 특정 메서드가 있습니다. 예를 들어, __int__
메서드를 재정의하면 사용자가 클래스 인스턴스에서 int()
을 사용하면 반환 할 대상을 Python에 알려줍니다. __float__
와 동일합니다. __iter__
메소드를 재정 의하여 파이썬이 클래스의 반복 가능한 객체를 만드는 방법을 제어 할 수도 있습니다 (파이썬이 클래스의 list
및 tuple
을 만드는 데 도움이 될 수 있음). 내 질문은 파이썬에게 사용자 정의 클래스의 dict
을 만드는 방법을 어떻게 말할 것인가? 특별한 __dict__
방법이 없으므로 어떻게 할 것입니까? 나는 다음과 같이합니다 : 나는 dict
에서 클래스 상속을 시도했습니다
class Foo():
def __dict__(self):
return {
'this': 'is',
'a': 'dict'
}
foo = Foo()
dict(foo) # would return {'this': 'is', 'a': 'dict'}
,하지만 그렇게 dict
ISN에서 상속 때문에 dict
및 type
에서 상속하려고 서브 클래스의 나중에 코드에서 오류가 발생합니다 가능성이 없다. 그것을 할 다른 방법이 있습니까? (당신이 dict
에 iter()
를 사용할 때 반환됩니다 무엇을) dict_keyiterator
개체를 반환 할 수 있도록
또한, 나는 이미 __iter__
방법을 무시했지만, 여전히 어떻게해야 작동하지 않습니다. 당신이 튜플의 반복자를 반환하기 위해 __iter__
를 설계, 그래서 만약
당신이 collections.abc'에서 상속 해봤 * Mapping' 아직? –
'collections.abc.Mapping'은'ABCMeta' 클래스입니다. 제 코드는 이미'type' 메타 클래스 위에 구축되었으므로 많은 코드가'ABCMeta '와 호환되지 않습니다. 나는 모든 코드를 'ABCMeta'로 작업하려고 변경하려고했지만 '매핑'과 같은 추상 클래스에 의존하지 않는 더 쉬운 방법이 있기를 바랐다. – ChristianFigueroa
'to_dict'와 같은 이름의 클래스에'@ staticmethod'를 추가하면됩니다.이 클래스를 명시 적으로 호출하여 사전을 만들 수 있습니다. 즉'result = foo_obj.to_dict()'를 호출합니다. – martineau