2010-02-06 28 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。你可以做的最好的是使用外部功能来完成任务。