Descriptor는 get, set, delete 매직메소드 중 하나 이상이 구현된 객체를 의미한다.
Descriptor는 Static Field에서만 작동한다고 하는데,
즉, 인스턴스 속성에서는 descriptor protocol이 발동하지 않는다.(규칙)

그러나, c.x에 접근하면 먼저 인스턴스의 dict에서 x를 찾는다. (만약 있다면, descriptor protocol이 발동되지 않는다. c.y는 원래와 같이 B() 인스턴스를 가져온다.)
없으면 c의 class C의 dict에서 x를 찾는다.
즉, c.x는 Static Field에 저장된(인스턴스 속성이 아닌) 클래스 속성이므로, 불러온 객체가 descriptor이면 descriptor protocol이 발동되고 get 메소드가 실행된다.
이때, B의 get의 2번째, 3번째 parameter로 a, b는 각각 (instance, owner라는 이름으로 많이들 정의하는 듯 하다.) c와 C를 argument로 받게 된다.