Question about abstract base classes and abstract properties -- Python 2.7
Steven D'Aprano
steve+comp.lang.python at pearwood.info
Tue Jan 10 21:16:43 EST 2017
On Wednesday 11 January 2017 12:26, Gerald Britton wrote:
> I was rereading the 2.7 docs about abstract base classes the other day. I
> found this line in the usage section of the abc.abstractproperty function:
>
> "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(object):
> __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.
I expected the same thing.
[...]
> If this actually doesn't work (catching the non-implementation at
> instantiation time), then would it be appropriate to amend the
> documentation? To me at least the doc implies that it *will* raise on the
> missing write property implementation (otherwise, what's the point of the
> example?)
Personally, I consider this a design bug: as designed, abstractproperty is
broken. But I couldn't call it a functional bug: it looks like it is working as
documented, as useless as that it.
Note that in Python 3.3 and better, abstractproperty is deprecated: the ABC
metaclass is smart enough to work with the regular property decorator:
https://docs.python.org/3.6/library/abc.html#abc.abstractproperty
> Or, am I just not grokking it properly?
No, I agree with you. I think that a bug request to improve the documentation
is appropriate.
--
Steven
"Ever since I learned about confirmation bias, I've been seeing
it everywhere." - Jon Ronson
More information about the Python-list
mailing list