title: Correct approach to validate attributes of an instance of class
body: <p>Having a simple Python class like this:</p>
  
  <pre><code>class Spam(object):
      __init__(self, description, value):
          self.description = description
          self.value = value
  </code></pre>
  
  <p>I would like to check the following constraints:</p>
  
  <ul>
  <li>"description cannot be empty"</li>
  <li>"value must be greater than zero"</li>
  </ul>
  
  <p>Should I:<br>
  1. validate data before creating spam object ?<br>
  2. check data on <code>__init__</code> method ?<br>
  3. create an <code>is_valid</code> method  on Spam class and call it with spam.isValid() ?<br>
  4. create an <code>is_valid</code> static method on Spam class and call it with Spam.isValid(description, value) ?<br>
  5. check data on setters declaration ?<br>
  6. etc. </p>
  
  <p>Could you recommend a well designed/Pythonic/not verbose (on class with many attributes)/elegant approach?</p>