title: Is it possible to override the property setter of a super class without needing to redefine the property
body: <p>I have classes, sharing the same property with the same getters, but different setters. As a simple, useless example, something like:</p>
  
  <pre><code>class Spam():
      @property
      def foo(self):
          return self.bar
  
      @foo.setter
      def foo(self, foo):
          self.bar = foo
  
  
  class Eggs(Spam):
      @foo.setter
      def foo(self, foo):
          self.bar = ' '.join(['Egg\'s foo:', foo])
  </code></pre>
  
  <p>Trying to run this module however throws the following error:</p>
  
  <pre><code>Traceback (most recent call last):
    File "./test.py", line 13, in &lt;module&gt;
      class Eggs(Spam):
    File "./test.py", line 14, in Eggs
      @foo.setter
  NameError: name 'foo' is not defined
  </code></pre>
  
  <p>To make this work as desired, I need to re-define <code>Eggs.foo</code>:</p>
  
  <pre><code>class Eggs(Spam):
      @property
      def foo(self):
          return super().foo
  
      @foo.setter
      def foo(self, foo):
          self.bar = ' '.join(['Egg\'s foo:', foo])
  </code></pre>
  
  <p>Is there a way to avoid this re-definition of the property?
  Since this is very annoying if you have lots of getters and setters like this in several sub-classes like I do.</p>