title: Are Python properties broken?
body: <p>How can it be that this test case</p>
  
  <pre><code>import unittest
  
  class PropTest(unittest.TestCase):
      def test(self):
          class C():
              val = 'initial val'
  
              def get_p(self):
                  return self.val
  
              def set_p(self, prop):
                  if prop == 'legal val':
                      self.val = prop
  
              prop=property(fget=get_p, fset=set_p)
  
          c=C()
          self.assertEqual('initial val', c.prop)
  
          c.prop='legal val'
          self.assertEqual('legal val', c.prop)
  
          c.prop='illegal val'
          self.assertNotEqual('illegal val', c.prop)
  </code></pre>
  
  <p>fails as below?</p>
  
  <pre><code>Failure
  Traceback (most recent call last):
    File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/unittest.py", line 279, in run
      testMethod()
    File "/Users/jacob/aau/admissions_proj/admissions/plain_old_unit_tests.py", line 24, in test
      self.assertNotEqual('illegal val', c.prop)
    File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/unittest.py", line 358, in failIfEqual
      (msg or '%r == %r' % (first, second))
  AssertionError: 'illegal val' == 'illegal val'
  </code></pre>