Why is this python class instance hashable?

Viewed 1695

This is pertaining to python 2.x

In the following class, if we subclass "object", I understand the methods are inherited in the derived class Foo which includes __hash__ (can see this by printing dir(Foo() )

Hence calling hash(Foo()) calls the magic method __hash__ and gives us a hash value.

However, if we don't subclass "object", resulting in dir(Foo()) not listing out the __hash__ method, so then why do we still get a hash value in python2?

I believe in python3 this problem has been addressed since the methods from the "object*" class are inherited by default.

#class Foo(object) Works since __hash__ is available in the base class 
class Foo:  #Why does this work? 
    def __init__(self):
        self.x = None
a = Foo()
print dir(a) # No __hash__ magic method
print hash(a) 
# Expecting an error like non-hashable or __hash__ not implemented 
# or something similar
1 Answers
Related