This is a programming language concept question, e.g. similar to the level of Programming Language Pragmatics, by Scott.
In Python, the classes of some kinds of objects are defined in terms of having some methods with special names, for example,

a descriptors' class is defined as a class which has a method named __get__, __set__, or __delete__().
an iterators' class is defined as a class which has a method named __next__.

Questions:

What is the language feature in Python called in programming language design? Is it duck typing?
How does the language feature work underneath?
In C++, C#, and Java, is it correct that a descriptor's class and an
iterator's class would have been defined as subclasses of some
particular classes? (similarly to C# interface IDisposable)
In Python, 

Can descriptors' classes be defined as subclasses of some particular class?
Can iterators' classes be defined as subclasses of some particular class?
This is an aspect of duck typing.
Python, as a dynamically-typed language, cares less about the actual types of objects than about their behaviour. As the saying goes, if it quacks like a duck, then it's probably a duck; in the case of your descriptor, Python just wants to know it defines the special methods, and if it does then it accepts that it is a descriptor.
What is the language feature that some kinds of classes are defined in terms of having some methods with special names?