Telltale sign — You can instantiate a python class and subsequently add fields to it.
Even bolder, an instance myObj of class MyClass can introduce a new method m() that’s completely missing in MyClass. As a result, python run-time dispatch algo will search
1) the instance’s private registry
2) the class’s registry
3) base class’s registry
I think the registry is an internal dictionary (“idic”). As stated in P302 [[Programming Python]], classes are just dictionaries that inherit from other dictionaries; each instance is a new dictionary. All these run-time searches hit the dictionaries.
I feel python introspection is more sophisticated and more comprehensive than c++/c#/java.
Note this applies to method resolution only. Fields? Probably similar but i’m not sure yet.