Each Answer to this Q is separated by one/two green lines.
In older Python versions when you create a class, it can inherit from
object which is as far I understand a special built-in Python element that allows your class to be a new-style class.
What about newer versions (> 3.0 and 2.6)? I googled about the
object class but I get so many results (for obvious reasons).
You don’t need to inherit from
object to have new style in python 3. All classes are new-style.
I realise that this is an old question, but it is worth noting that even in python 3 these two things are not quite the same thing.
If you explicitly inherit from
object, what you are actually doing is inheriting from
builtins.object regardless of what that points to at the time.
Therefore, I could have some (very wacky) module which overrides object for some reason. We’ll call this first module “newobj.py”:
import builtins old_object = builtins.object # otherwise cyclic dependencies class new_object(old_object): def __init__(self, *args, **kwargs): super(new_object, self).__init__(*args, **kwargs) self.greeting = "Hello World!" builtins.object = new_object #overrides the default object
Then in some other file (“klasses.py”):
class Greeter(object): pass class NonGreeter: pass
Then in a third file (which we can actually run):
import newobj, klasses # This order matters! greeter = klasses.Greeter() print(greeter.greeting) # prints the greeting in the new __init__ non_greeter = klasses.NonGreeter() print(non_greeter.greeting) # throws an attribute error
So you can see that, in the case where it is explicitly inheriting from object, we get a different behaviour than where you allow the implicit inheritance.