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).
In Python 2: always inherit from object explicitly. Get the perks. In Python 3: inherit from object if you are writing code that tries to be Python agnostic, that is, it needs to work both in Python 2 and in Python 3. Otherwise don't, it really makes no difference since Python inserts it for you behind the scenes.
Inheritance allows us to define a class that inherits all the methods and properties from another class. Parent class is the class being inherited from, also called base class.
Inheritance enables us to define a class that takes all the functionality from a parent class and allows us to add more.
All classes in Python are objects of the type class, and this type class is called Metaclass . Each class in Python, by default, inherits from the object base class.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With