Не может ваш класс просто переопределить join
:
class MyStr(unicode):
def join(self, strs):
# your code here
Это будет, по крайней мере, охватывать случай MyStr(...).join(...)
После комментария @ bukzor я посмотрел, как это работает, и похоже, что join - это функция C, которая всегда возвращает объект unicode
при вызове с использованием разделителя unicode
.
Код можно увидеть здесь . Взгляните на функцию PyUnicode_Join
, особенно эту строку:
res = _PyUnicode_New(res_alloc);
Итак, результат PyUnicode_Join
всегда будет экземпляром PyUnicode
.
Единственный случай ошибки, который я вижу, это если ввод не является Unicode:
/* Convert item to Unicode. */
if (! PyUnicode_Check(item) && ! PyString_Check(item)) {
PyErr_Format(PyExc_TypeError,
"sequence item %zd: expected string or Unicode,"
" %.80s found",
i, Py_TYPE(item)->tp_name);
goto onError;
}
Так что я не думаю, что это может привести к сбою в этом случае (по крайней мере, пока ваш объект выходит за пределы unicode
):
':'.join( [MyStr('A'), 'B', u'C'] )