2010-02-06 62 views
2

有沒有鉤住str .__ getitem__的方法?在Python中鉤住str .__ getitem__

例子:

我希望能夠做的:

>>> "this is a string"[[1,3,4]] 
'hs ' 

傳遞一個清單[],並獲得在該列表中的項目。

一個更現實的例子:

class STR(str): 
    pass 

class INT(int): 
    pass 

這很容易使該STR("a string")[1]STR("a string")[INT(1)]返回STR實例。

我希望能夠使"a non STR string"[INT(1)]返回一個STR實例。

+0

這樣做的原因有很多,通常是一個壞主意,但我認爲無法修改來自C代碼(包括內置函數)的類只是一種優化。你可以做的最好的辦法是使你的INT類成爲int的一個子類(這意味着它是不可變的),或者定義'__int__',並使用「string」[int(INT(1))]。 (對於非整數,字符串下標應該實際上隱式調用'__int__'。) – 2010-02-07 02:21:05

回答

3

爲什麼勾一種常用的內部函數時,你可以

def get_characters (s, l): 
    return "".join(s[i] for i in l) 

>>> get_characters("this is a string", [1,3,4]) 
"hs " 
+0

以上只是一個例子。真正想要的是在不修改原始源的情況下對getitem的語義進行修改。 – 2010-02-06 14:13:48

+0

@Juanjo:Myabe你應該編輯你的問題來展示你真正想要完成的事情。 – kennytm 2010-02-06 14:20:44

+0

完成。請看我的新例子。 – 2010-02-06 14:25:34

2

在C中定義對象的方法不能monkeypatched。你可以做的最好的是使用外部功能來完成任務。