On 02/02/2019 18:44, MRAB wrote:
On 2019-02-02 17:31, Adrien Ricocotam wrote:
> I personally would the first option to be the case. But then vectors shouldn't be list-like but more generator like.
OK, here's another one: if you use 'list(...)' on a vector, does it apply to the vector itself or its members?

>>> list(my_strings)

You might be wanting to convert a vector into a list:

['one', 'two', 'three']

or convert each of its members onto lists:

Vector([['one'], ['two'], ['three']])

More likely you mean:

>>> [list(i) for i in ['one', 'two', 'three']]
[['o', 'n', 'e'], ['t', 'w', 'o'], ['t', 'h', 'r', 'e', 'e']]

The problem, of course, is that list() now has to understand Vector specially, and so does any function you think of applying to it. Operators are easier (even those like [1:]) because Vector can make its own definition of each through (a finite set of) dunder methods. To make a Vector accept an arbitrarily-named method call like my_strings.upper() to mean:

>>> [i.upper() for i in ['one', 'two', 'three']]
['ONE', 'TWO', 'THREE']

is perhaps just about possible by manipulating __getattribute__ to resolve names matching methods on the underlying type to a callable that loops over the content.