What is the difference between type and class obj?
Class obj is a superclass for all classes, whereas type is a superclass for all types (including classes). In other words, type is a superclass of class obj.
Why is it important to use the correct type?
When using the super() builtin, the first argument must be a type (typically, this will be the class being subclassed). In your example, you are passing in the subclass (MyClass1) instance, which is not a type.
How can I ensure I am using the correct type?
There are a few different ways to ensure you are using the correct type for your superclass. The first is to use the isinstance() built-in function. This function takes two arguments, the first is the object you want to check and the second is the type you want to check against. If the object is an instance of the type, isinstance() will return True, otherwise it will return False.
The other way to check the type of an object is by using the issubclass() built-in function. This function also takes two arguments, but it works in the reverse of isinstance(). issubclass() will return True if the first argument is a subclass of the second argument. If the first argument is not a subclass of the second, or if either of the arguments passed in are not types, issubclass() returns False.
What are the consequences of using the wrong type?
There can be serious consequences to using the wrong type in your Python code. For example, if you use the wrong type for an integer division, you can end up with a result that is not what you expected. In addition, using the wrong type can lead to errors in your code that are difficult to debug.