On Mon, Dec 9, 2013 at 1:41 PM, Mark Janssen <dreamingforw...@gmail.com> wrote: >>> What methods, if any does it provide? Are they all abstract? etc??? >> >> Pretty much nothing useful :-) >> >> py> dir(object) >> [...] >> > > So (prodding the student), Why does everything inherit from Object if > it provides no functionality? > > Practicality-beats-purity-yours?
Nothing useful to call directly. An int has some useful methods in Python: >>> (258).to_bytes(2,"little") b'\x02\x01' So does a list: >>> [1,4,1,5,9].count(1) 2 But there's nothing you'd normally want to call from object itself (except maybe __repr__). There *are*, however, important pieces of default functionality. Steven mentioned __eq__, and there's also its pair __hash__. The default system works because the root type provides implementations of those two functions: >>> a = object() >>> b = object() >>> a == b False >>> d = {a:"A", b:"B"} >>> d[a] 'A' And it's important that these sorts of things work, because otherwise a simple Python class would look like this: class Foo: def __new__(self): pass def __init__(self): pass def __hash__(self): return id(self) def __eq__(self, other): return self is other # ... This repetition is exactly what inheritance is good at solving. Therefore putting that functionality into a base class makes sense; and since everything MUST have these functions to be able to be used plausibly, putting them in the lowest base class of all makes the most sense. ChrisA -- https://mail.python.org/mailman/listinfo/python-list