__get__
메서드를 사용하여 개체 목록을 serialize하면 __get__
이 호출되지 않고 원시 (사용자 지정 __get__
에 의해 처리되지 않음) 값이 __set__
에서 사용됩니다. 파이썬의 json
모듈은 어떻게 항목을 반복 처리합니까?파이썬의 JSON 모듈은 __get__을 사용하지 않습니까?
참고 : 직렬화하기 전에 목록을 반복 할 경우 올바른 값은 __get__
입니다.
__get__
메서드를 사용하여 개체 목록을 serialize하면 __get__
이 호출되지 않고 원시 (사용자 지정 __get__
에 의해 처리되지 않음) 값이 __set__
에서 사용됩니다. 파이썬의 json
모듈은 어떻게 항목을 반복 처리합니까?파이썬의 JSON 모듈은 __get__을 사용하지 않습니까?
참고 : 직렬화하기 전에 목록을 반복 할 경우 올바른 값은 __get__
입니다.
... :
파이썬 3.1.2 문서에서
import simplejson
class IterEncoder(simplejson.JSONEncoder):
def default(self, o):
try:
iterable = iter(o)
except TypeError:
pass
else:
return list(iterable)
return simplejson.JSONEncoder.default(self, o)
simplejson.dumps(YourObject,cls=IterEncoder)
은 (여기지만 그렇지 않으면 편집되지 않은보기 위해 다시 포맷) :
json.dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True,
allow_nan=True, cls=None, indent=None, separators=None,
default=None, **kw)
기본값 (obj)은 obj의 serializable 버전을 반환하거나 TypeError을 가져와야하는 함수입니다. 기본값은 단순히 TypeError입니다.
따라서 __get__
함수는 default=yourcustomjsonencoder.__get__
또는 이와 비슷한 형식으로 전달되어야합니까? 그냥 생각. 나는 벗어날 수있다. (아마 그렇 겠지만) 최소한의 아이디어이다.
예를 들려 줄 수 있습니까? – interjay
'__get__'과'__set__' 메쏘드는 기술자 프로토콜을 위해 사용됩니다. 그것들은 클래스의 속성 일 때만 호출되어야하며, 클래스 나 인스턴스에서 이러한 속성을 가져 오거나 설정하는 중입니다. –
재미있는 것은, 값을 할당 할 때'__set__'이 호출 되었기 때문에, 검색 할 때 항상'__get__'이 호출 될 것이라고 생각했습니다. – Carson