Python新手,NameError:未定义名称(创建类后)

Python新手,NameError:未定义名称(创建类后),python,Python,不知道为什么会发生这种情况,也不知道如何解决。我是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 morni

不知道为什么会发生这种情况,也不知道如何解决。我是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)
名称错误:未从以下位置定义名称“getitem”:

object.\uuu获取项目\uuu(self,key)
调用以实现对
self[key]
的评估

通过实现
\uuu getitem\uuu
,您可以使用括号表示法检索项目:

s[2]
或者通过显式调用
\uuuu getitem\uuuu
(我不会这么做):

发件人:

object.\uuu获取项目\uuu(self,key)
调用以实现对
self[key]
的评估

通过实现
\uuu getitem\uuu
,您可以使用括号表示法检索项目:

s[2]
或者通过显式调用
\uuuu getitem\uuuu
(我不会这么做):


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所说,由于
\uuu getitem\uuuu()
是一个特殊的函数(有点像是对下标的操作符重写),所以不应该直接调用它-只是提醒一下


有关更多信息,请参见。

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所说,由于
\uuu getitem\uuuu()
是一个特殊的函数(有点像是对下标的操作符重写),所以不应该直接调用它-只是提醒一下


更多信息,请参阅。

非常感谢,这就解决了问题。喜欢这些初学者的错误。非常感谢,这就解决了它。喜欢这些初学者的错误。