PyObject
(файл object.h), в которой одно из полей — ob_type
, указатель на структуру _typeobject
, котоая определяет «настоящий» тип объекта. type(x)
и дескриптор object.__class__
обращаются за типом к этому полю. Но __class__
можно переопределить, что и делает weakref.proxy
. При этом type(x)
все равно будет продолжать обращаться к ob_type
и результат его определения подменить не удастся.