0

不知道为什么会发生这种情况或如何解决它。我是 Python 新手,感谢您的帮助。

class Sentence:
    def __init__(self, s):
        self.s= s
        x=s[:-1]
        self.L= list(x.split())
    def __getitem__(self,idx):
        return (self.L[idx])


s= Sentence('What a beautiful morning!')

getitem(s, 2)

NameError:名称“getitem”未定义

4

2 回答 2

2

文档

object.__getitem__(self, key)

调用执行评估self[key]。...

通过实现__getitem__,您可以使用方括号表示法来检索项目:

s[2]

或者通过显式调用__getitem__(我不会这样做):

s.__geitem__(2)
于 2013-06-05T00:15:59.023 回答
1

Blender 有一个很好的直截了当的答案,但就其价值而言,我注意到您输入了:

getitem(s, 2)

看起来你在想这样的事情:

def __getitem__(self, x):
                 |    |
        ---------     |
        |  ------------
        v  v
getitem(s, 2)

请注意,当您为类定义方法并self作为参数传递时,您将指定该类的实例(即对象)作为self. 因此,当您这样做时,self.s = s您是在说“将此对象设置s为参数s的值”。

self不会成为括号中的论据之一;您可以将该论点视为括号之外的特殊论点。

def __getitem__(self, x):
                 |    |
------------------    |
|             ---------
v             v
s.__getitem__(2)

同样,正如 Blender 所说,因为__getitem__()它是一个特殊函数(有点像下标的运算符覆盖),你不应该直接调用它——只是提醒一下!

有关更多信息,请参阅此问题

于 2013-06-05T00:57:24.387 回答