title: Python - property returns old value when inheriting from abstract class
body: <p>My question is about inherited class resolution order. This is a dummy code snippet illustrating my issue:</p>
  <pre><code>from abc import ABC, abstractmethod
  
  class BaseClass(ABC):
      def __init__(self):
          self.__value = 1
          self.set_value()
  
      @abstractmethod
      def set_value(self):
          raise NotImplementedError
  
      @property
      def value(self):
          return self.__value
  
  class DerivedClass(BaseClass):
      def __init__(self):
          super().__init__()
  
      def set_value(self):
          self.__value = 2
  
  dc = DerivedClass()
  print(dc._DerivedClass__value)
  print(dc.value)
  assert dc.value == 2
  </code></pre>
  <p>Code output:</p>
  <pre><code>2
  1
  Traceback (most recent call last):
    File &quot;&lt;stdin&gt;&quot;, line 26, in &lt;module&gt;
  AssertionError
  </code></pre>
  <p>I expected the <code>DerivedClass</code> to override the <code>set_value</code> method before it is called in <code>__init__</code>. However, this is not the case as the property somehow remembers the original <code>.__value</code> value and not the new one. Can someone explain me why this is happening?</p>
  <p>What is a good solution in this case? My real case is a rather large base class with inherited classes overriding only key methods - like <code>.set_value</code> in this case.</p>