Are Python properties broken?

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP


Are Python properties broken?



How can it be that this test case


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)



fails as below?


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'





Duplicate: stackoverflow.com/questions/2240351/…
– Roger Pate
Mar 17 '10 at 4:07





This is a legitimate criticism that the error message sucks when you try to use property but forgot new-style class/must inherit from Object. IDEs could catch this one.
– smci
Aug 13 '12 at 19:23


property


Object




1 Answer
1



Your class C does not inherit from object or any other new-style class, so it is an old-style class (and therefore does not support properties). Descriptors are for new-style classes only. To fix, change class C() to class C(object).


C


object


class C()


class C(object)



http://www.python.org/download/releases/2.2.3/descrintro/ provides some details, if you are interested. New-style classes are better in several ways.





Thanks Mike. That was fast. I had just stumbled on the same answer here as well: stackoverflow.com/questions/2240351/…
– Jacob
Mar 17 '10 at 3:26






By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Popular posts from this blog

Makefile test if variable is not empty

Will Oldham

'Series' object is not callable Error / Statsmodels illegal variable name