[Python-3000] Traits/roles instead of ABCs
Bill Janssen
janssen at parc.com
Mon Apr 30 18:08:40 CEST 2007
> [Collin Winter]
> +100 I'm very interested in seeing a lighter weight alternative to abc.py that:
>
> 1) is dynamic
There's no reason ABC's can't be dynamic.
> 2) doesn't require inheritance to work
> 3) doesn't require mucking with isinstance or other existing mechansims
Using existing mechanisms that work for the issue is always preferable
to adding new ones that *also* work for the issue.
> 4) makes a limited, useful set of assertions rather than broadly covering a whole API.
That's what an API is, isn't it?
> 5) that leaves the notion of duck-typing as the rule rather than the exception
Here we disagree.
> 6) that doesn't freeze all of the key APIs in concrete
After 15 years of experience with the key APIs, we could perhaps freeze some of them?
> IMHO, the ABC approach is using a cannon to shoot a mosquito. My day-to-day
> problems are much smaller are could be solved by a metadata attribute or a
> role/trait solution:
And then you cite a few symptoms of not having an API-based system:
> * knowing whether a __getitem__ method implements a mapping or a sequence
In other words, what APIs does this value support?
> * knowing whether an object can have more that one iterator (i.e a file has one
> but a list can have many)
In other words, what APIs does this value support?
> * knowing whether a sequence, file, cursor, etc is writable or just readonly.
In other words, what APIs does this value support?
If we simply had a small standard extensible set of APIs, and a way to
indicate that a value does or doesn't support one or more of them,
we'd be done. We could either add a new mechanism to do this, or simply
actually use the one we already have, which should work perfectly well for
this purpose.
Bill
More information about the Python-3000
mailing list