[Python-ideas] ABC: what about the method arguments ?
Terry Reedy
tjreedy at udel.edu
Fri Sep 24 02:24:13 CEST 2010
On 9/23/2010 3:26 PM, Guido van Rossum wrote:
> On Thu, Sep 23, 2010 at 11:52 AM, Antoine Pitrou<solipsis at pitrou.net> wrote:
>> On Thu, 23 Sep 2010 14:39:01 -0400
>> Terry Reedy<tjreedy at udel.edu> wrote:
>>> If I were writing a class intended to implement an particular ABC, I
>>> would be happy to have an automated check function that might catch
>>> errors. 100% testing is hard to achieve.
>>
>> How would an automatic check function solve anything, if you don't test
>> that the class does what is expected?
>>
>> Again, this is exactly the argument for compile-time type checking, and
>> it is routinely pointed out that it is mostly useless.
>
> That may be the party line of dynamic-language diehards, but that
> doesn't make it true. There are plenty of times when compile-time
> checking can save the day, and typically, the larger a system, the
> more useful it becomes.
Sometimes you surprise me with your non-dogmatic practicality. I do
hope, though, that you continue to reject C-like braces {;-}.
> Antoine, can you back off your attempts to
> prove that the proposed feature is useless and instead help designing
> the details of the feature (or if you can't or don't want to help
> there, just stay out of the discussion)?
Yes, let the cat scratch his itch and see what he produces.
Since unittests have been brought up, I have a idea and question.
Can this work? Split the current test suite for a concrete class that
implements one of the ABCs into concrete-specific and ABC-general
portions, with the abstract part parameterized by concrete class.
For instance, split test/test_dict.py into test_dict.py and
test_Mapping.py, where the latter has all tests that test compliance
with the Mapping ABC (or whatever it is called) and the former keeps all
the dict-specific extension tests. Rewrite test_Mapping so it is not
dict specific, so one could write something like
class MyMapping():
"Implement exactly the Mapping ABC with no extras."
...
if __name__ == '__main__':
from test import test_Mapping as tM
tM.concrete = MyMapping
tM.runtests()
This is similar to but not the same as splitting tests into generic and
CPython parts, the latter for reuse by other implementations of the
interpreter. (For dicts, test_dict.py could still be so split, or a
portion of it made conditional on the platform.) This idea is for reuse
of tests by other implementations of ABCs, whatever interpreter
implementation they run under.
The underlying question is whether ABCs are intended to be an integral
part of Python3 or just an optional extra tucked away in a corner (which
is how many, including me, still tend to view them)? If the former, then
to me they should, if possible, be supported by a semantic validation
test suite.
In a way, I am agreeing with Antoine's objection that signature
validation is not enough, but with the opposite suggestion of extend
rather than reject Tarek's idea of providing auto test tools that make
writing and using ABCs easier.
--
Terry Jan Reedy
More information about the Python-ideas
mailing list