New submission from Gerald Britton:

I was rereading the 2.7 docs  about abstract base classes the other day.  I 
found this:

"This defines a read-only property; you can also define a read-write abstract 
property using the ‘long’ form of property declaration:"

along with an example.  so I copied the example and put in a little surrounding 
code:


from abc import ABCMeta, abstractproperty

class C:
    __metaclass__ = ABCMeta
    def getx(self): pass
    def setx(self, value): pass
    x = abstractproperty(getx, setx)
 
class D(C):
    @property
    def x(self):self._x
 
d = D()    
print(d)   

When I ran this, I expected an exception, since I defined a read/write abstract 
property but only implemented the read operation.  However, the example runs 
fine. That is the class D can be instantiated without error.  Of course I 
cannot set the property since I didn't implement that part.

Now, If I don't implement the property at all, I can' instantiate the class.  I 
get:

"TypeError: Can't instantiate abstract class D with abstract methods x"

which is what I would expect.  What I don't understand is why I don't get a 
similar error when I implement the read operation for the property but not the 
write operation.

If this actually doesn't work (catching the non-implementation at instantiation 
time), then why is it documented this way?  To me at least the doc implies that 
it *will* raise on the missing write property implementation.

If ABCs are working as intended, can the documentation be changed to reflect 
that as per my experience above?  If the documentation is correct, can the ABC 
implementation be modified to function that way?

----------
assignee: docs@python
components: Documentation
messages: 285356
nosy: docs@python, gbritton
priority: normal
severity: normal
status: open
title: Possible error in discussion of Abstract Base Classes and abstract 
properties
versions: Python 2.7

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue29257>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to