[Tutor] 'object' class

Steven D'Aprano steve at pearwood.info
Sat Oct 15 00:34:47 CEST 2011


Dave Angel wrote:

> 2) I believe super() is new to new-style classes.  In any case the 
> documentation for it seem to assume new-style.


Yes, super() only works for new style classes.

 >>> class Test:
...     def method(self):
...             super(Test, self).method()
...
 >>> t = Test()
 >>> t.method()
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
   File "<stdin>", line 3, in method
TypeError: super() argument 1 must be type, not classobj


Likewise for property(). property is particularly tricky, because it 
*appears* to work for old style classes:

 >>> class Test:
...     def __init__(self, value):
...             self._x = value
...     def getx(self):
...             print "Getting x"
...             return self._x
...     def setx(self, value):
...             print "Setting x"
...             self._x = value
...     x = property(getx, setx)
...
 >>> t = Test(42)
 >>> t.x
Getting x
42

but actually doesn't work correctly:

 >>> t.x = 12
 >>> t.x
12



-- 
Steven


More information about the Tutor mailing list