为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕运维8079593 2021-03-09 13:08:54
不知道为什么会这样或如何解决。我是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”
查看完整描述

2 回答

?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

从文档:

object.__getitem__(self, key)

要求对实施评估self[key]。...

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

s[2]

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

s.__geitem__(2)


查看完整回答
反对 回复 2021-03-30
?
千万里不及你

TA贡献1784条经验 获得超9个赞

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__()是一个特殊功能(有点像下标的运算符覆盖),因此您不应该直接调用它-只是要提防!


查看完整回答
反对 回复 2021-03-30
  • 2 回答
  • 0 关注
  • 315 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信