未能類只重寫join
:
class MyStr(unicode):
def join(self, strs):
# your code here
這將至少覆蓋MyStr(...).join(...)
的情況下
@ bukzor的評論之後,我查了一下它是如何工作的,看起來join是一個C函數,它總是返回一個當使用unicode
分隔符呼叫時使用0對象。
The code can be seen here。看看在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'])
這很簡單:-) –
@Brendan Long,Raymond Hettinger:這是行不通的。請看:http://pastebin.com/3kuTXG1T – bukzor
@bukzor - 你說得對,重載'__add__'不足以使'':「。join([MyStr(」a「),」a「]) '失敗。也許'join'使用格式化字符串?或者它可能只是一個C函數。自從另一部分(超載「連接」)確實起作用以後,我拿出了那部分內容。 –