2010-03-18 4 views
1

python 3k 용 cpython 코드를 읽고 있는데 dict_subscript이 호출 될 때만 __missing__이 호출되지만, PyDict_GetItem이 사용되는 경우에는 호출되지 않습니다. 이 두 가지 방법의 차이점은 무엇이며 각각이 호출 될 때 무엇입니까? dict의 서브 클래스 인 PyObject를 넘겨주고 __missing__ 메쏘드를 가지고 있다면 어떻게 사용합니까? PyDict_GetItem은 그렇게하지 않습니다.cpython : PyDict_GetItem이 호출되고 dict_subscript?

답변

1

관찰, 추측 등 :

같은 파이썬 2.x 또는 3.0에서 발생

dict_subscript은 high_level dict.__getitem__ 메서드와 동일한 기능을 구현하므로 adict[somekey]이 파이썬 코드의 할당보다 왼쪽에 나타날 때마다 호출됩니다.

PyDict_GetItem은 C API의 일부입니다. 아마도 업데이트되지 않은 것 같습니다.

PyDict_GetItem의 시작 무서운 의견을 읽고 데, 한번은 그 전화를 아마 당신은 my_getitem = getattr(my_dict, '__getitem__')의 C 레벨에 해당 할 수 있습니다 ;-) 대신

PyDict_GetItemWithError을 사용하는 것입니다.

아마 버그 티켓을 올리거나 comp.lang.python

에 질문 할 수 있습니다.
관련 문제