Why Python 3.X allows self argument in class's method to be other than an instance type, meanwhile Python 2.x doesn't?
<p>Given the example: </p>

<pre><code>&gt;&gt;&gt; class Cool: 
...    def mthd(self, val): 
...        self.val = val 
...

&gt;&gt;&gt; def x(): pass

&gt;&gt;&gt; Cool.mthd(x, 360)      # Works in 3.X only, not in 2.X 
</code></pre>

<p>2.X raises <code>**TypeError: unbound method...**</code> error, but in 3.x it works just fine. </p>

<blockquote>
  <p>Why does Python 2.X restricts <strong>self</strong> 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? </p>
</blockquote>