Nathan Rice wrote:
On Mon, Dec 19, 2011 at 1:01 PM, Ethan Furman
wrote: Nathan Rice wrote:
[[1, 2], [3, 4], [5, 6]] could serve as an alternate example of why you can't directly map child methods with the same names.
If you have to change the names, doesn't that negate the ability of "a reliable method to make functions operate on both scalar and vector values"?
To clarify...
Functions could reliably support both vector and scalar context, by checking that a type contract exists.
That sounds like type checking, which is not Pythonic. Duck-typing, on the other hand, *is*. def capitalize_me(some_obj): some_obj = some_obj.capitalize() --> capitalize_me("a simple string") "A simple string" --> capitalize_me(["a", "list", "of", "strings"]) ["A", "List", "Of", "Strings"]
Because of the name clash between parent and elementwise member methods when dealing with collections of collections (and some other classes), if the type contract provided "broadcast" versions of child methods, they would have to be provided with under an alias, perhaps X -> elementwise_X. I do not think people should be able to be oblivious of when they are calling collection and member methods, that encourages sloppy programming. I like the broadcast feature because it makes it easier to write code in a clear left to right narrative style, and that seems very pythonic to me compared with an "inside-out" style.
Duck-typing is neither oblivious, nor sloppy -- at least, not inherently. Is my sample code above not what you had in mind? ~Ethan~