@property decorator doesn't raise exceptions
Steven D'Aprano
steve at REMOVE-THIS-cybersource.com.au
Fri Oct 24 19:13:39 EDT 2008
On Fri, 24 Oct 2008 09:34:36 -0700, Rafe wrote:
>> You must subclass from "object" to get a new style class. properties
>> don't work correctly on old style classes.
>>
>> Christian
>
> All classes are a sub-class of object. Any other ideas?
Only in Python 3. If you are relying on that to be true in Python 2.x,
you're going to disappointed:
>>> class A():
... pass
...
>>> issubclass(A, object)
False
There are a lot of classic classes in the standard library. If you
inherit from them, your class will also be a classic class and properties
will fail to work correctly.
Earlier, you wrote:
"I've encountered a problem which is making debugging less obvious than
it should be. The @property decorator doesn't always raise exceptions."
Are you expecting it to raise an exception when the class is defined, or
when the property is called? e.g.
class Fail(object):
@property
"this should raise an exception"
Works for me -- I get a syntax error, as expected.
"It seems like it is bound to the class but ignored when called. I can
see the attribute using dir(self.__class__) on an instance, but when
called, python enters __getattr__. If I correct the bug, the attribute
calls work as expected and do not call __getattr__."
Perhaps you can give us a minimal example showing the code with the bug,
then how you corrected the bug? That might give as a hint as to what is
going on. I know that's hard, when you can't reproduce the problem, but
it's just as hard for us to solve your problem without more information.
--
Steven
More information about the Python-list
mailing list