Override property setter of base class in Python 3 - USE CASE

Ethan Furman ethan at stoneleaf.us
Sun Sep 11 11:42:19 EDT 2016


On 09/11/2016 08:28 AM, Peter Otten wrote:
> Nagy László Zsolt wrote:
>
>>
>>> Yes, I believe it does. (Others may disagree. This is a design
>>> question and very much a matter of style, not hard fact.) I would have
>>> an explicit action "set_content" which will set the value of an input
>>> field, the inner text of a textarea, the checked state of a check box,
>>> etc.
>> In other words, you would use simple getter and setter methods instead
>> of properties. It is the simplest solution. (And I believe, it is
>> non-pythonic, but that is just an opinion.)
>>
>> I would like to hear other opinions.
>
> Disregarding potential implementation obstacles I think it would be clean
> and clear if you could access a property foo in a base class with
>
> super().foo
>
> and set it with
>
> super().foo = value
>
> It looks like the get part already works:
>
>>>> class A:
> ...     @property
> ...     def foo(self): return "foo"
> ...
>>>> class B(A):
> ...     @property
> ...     def foo(self): return super().foo.upper()
> ...
>>>> A().foo
> 'foo'
>>>> B().foo
> 'FOO'

Yes, the get part works.  The set part is a pain, and a bit ugly:

   super(B, B).foo.__set__(self, value)

There is an issue for this on the tracker:  http://bugs.python.org/issue14965

--
~Ethan~



More information about the Python-list mailing list