在Python中钩住str.\uuuu getitem\uuuu

在Python中钩住str.\uuuu getitem\uuuu,python,Python,有没有办法钩住str.\uuuu getitem\uuuuuuuu 例如: 我希望能够做到: >>> "this is a string"[[1,3,4]] 'hs ' 将列表传递给[]并获取该列表中的项目 一个更现实的例子: 很容易让STRa字符串[1]或STRa字符串[INT1]返回STR实例 我希望能够使非STR字符串[INT1]返回STR实例。如果可以,为什么要钩住一个常用的内部函数 def get_characters (s, l): return "".joi

有没有办法钩住str.\uuuu getitem\uuuuuuuu

例如:

我希望能够做到:

>>> "this is a string"[[1,3,4]]
'hs '
将列表传递给[]并获取该列表中的项目

一个更现实的例子:

很容易让STRa字符串[1]或STRa字符串[INT1]返回STR实例


我希望能够使非STR字符串[INT1]返回STR实例。

如果可以,为什么要钩住一个常用的内部函数

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

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

不能对C中定义的对象上的方法进行修补。您最好使用外部函数来完成任务。

以上只是一个示例。a真正想要的是在不修改原始源的情况下修改getitem的语义。@Juanjo:Myabe您应该编辑您的问题以显示您真正想要完成的任务。完成。请看我的新例子。有各种原因说明为什么这样做通常是个坏主意,但我认为不能修改来自包含内置代码的C代码的类只是一种优化。最好的方法是将INT类设置为INT的一个子类,这意味着它是不可变的,或者定义uu INT_uu,并使用string[intINT1]。字符串订阅实际上应该隐式调用非整数的_int。
def get_characters (s, l):
  return "".join(s[i] for i in l)

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