在Python中钩住str.__getitem__

2 投票
2 回答
547 浏览
提问于 2025-04-15 18:58

有没有办法可以修改 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 实例。

2 个回答

2

在C语言中,定义在对象上的方法是不能被随意修改的。你能做的最好的办法就是使用一个外部函数来完成这个任务。

3

为什么要去修改一个常用的内部函数呢,直接使用它不就可以了吗?

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

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

撰写回答