title: Is it true that once property is used in Python, it'd always be better initializing via property?
body: <p>I used to initialize private attributes in <code>__init__</code> like below (this way of initializing is also commonly seen),</p>
  
  <pre><code>class Duck():
      def __init__(self, input_name): 
          self.__name = input_name
  
          @property 
          def name(self): 
              return self.__name 
  
          @name.setter 
          def name(self, input_name): 
              self.__name = input_name
  
          # Use private attribute __name internally for other purposes below...
  </code></pre>
  
  <hr>
  
  <p>But I just want to make sure if it is actually safer to just use property at the very beginning <code>__init__</code>, for example, in next example, for input greater than 1000 or less than 0, I want to evaluate to 1000 and 0, respectively, rather than the original input value. It seems I can't use <code>self.__x = x</code>,</p>
  
  <pre><code>class P:
      def __init__(self,x):
          # If self.__x = x, not desirable
          self.x = x 
  
      @property
      def x(self):
          return self.__x
  
      @x.setter
      def x(self, x):
          if x &lt; 0:
              self.__x = 0
          elif x &gt; 1000:
              self.__x = 1000
          else:
              self.__x = x
  </code></pre>