title: Python overriding of property does not work
body: <p>In the code below I would expect that it shouldn't matter if I use the property <code>val</code> or call the function <code>get_val</code>. The output should be the same.</p>
  
  <pre><code>#! /usr/bin/env python
  
  class A():
      def get_val(self):
          print(self)
          raise NotImplementedError
  
      val = property(get_val)
  
  class B(A):
      def __init__(self):
          self.b_val = "foo\n"
  
      def get_val(self):
          print(self)
          return self.b_val
  
  b = B()
  print(b.get_val())
  print(b.val)
  </code></pre>
  
  <p>But the output I get is:</p>
  
  <pre><code>&lt;__main__.B object at 0x0000014BD2BBE898&gt;
  foo
  
  &lt;__main__.B object at 0x0000014BD2BBE898&gt;
  Traceback (most recent call last):
    File "prop_override_test.py", line 20, in &lt;module&gt;
      print(b.val)
    File "prop_override_test.py", line 6, in get_val
      raise NotImplementedError
  NotImplementedError
  </code></pre>
  
  <p>Why doesn't the property use the overriden <code>get_val</code> function?</p>
  
  <p>I use python version 3.6.2</p>
  
  <pre><code>python --version
  Python 3.6.2
  </code></pre>