不知道为什么会这样或如何解决。我是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)
千万里不及你
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__()是一个特殊功能(有点像下标的运算符覆盖),因此您不应该直接调用它-只是要提防!
添加回答
举报
0/150
提交
取消