Given the example:
>>> class Cool:
... def mthd(self, val):
... self.val = val
...
>>> def x(): pass
>>> Cool.mthd(x, 360) # Works in 3.X only, not in 2.X
2.X raises **TypeError: unbound method...**
error, but in 3.x it works just fine.
Why does Python 2.X restricts self argument to be only an instance type, whereas Python 3.X doesn't restrict it to any data type? And why was this changed in 3.X?