函数secondrd应该从listplit中获取输出,并对输出执行操作。由于为清楚起见,我已经将代码截断了,如果将最后一行更改为print(listsplit(text))
,它返回['One', 'Two', 'Three', 'Four', 'Five', 'Six', 'Seven']
,则输出应与输出完全相同,而是每当我运行代码时,tword函数无法调用listplit函数。我收到一条错误消息:“ NameError:未定义名称'wordicts'”。
class wordicts:
def listsplit(text):
l = text.split(" ")
return l
def tword(text):
l = wordicts.listsplit(text)
return l
hw = "One Two Three Four Five Six Seven"
print(tword(hw))
答案 0 :(得分:2)
函数应该属于类实例,请注意在第一位置使用self
参数:
class WordDict:
def listsplit(self, text):
l = text.split(" ")
return l
def tword(self, text):
l = self.listsplit(text)
return l
hw = "One Two Three Four Five Six Seven"
wd = WordDict()
print(wd.tword(hw))
但是,除非您对此类进行更多 的操作,否则这似乎有点过头了,并且最好使用列表理解或lambda等。
答案 1 :(得分:1)
首先,您的方法不要将self
参数作为第一个参数。
如果不需要引用该类的实例,则应使用@staticmethod
装饰器。
第二,您的方法调用仍在类体内。我认为这不是故意的。这也是引发NameError的原因。
print(wordicts.tword(hw))
部分在类定义时间执行,而类本身还不存在。
正如您提到的那样,在实际代码中涉及更多逻辑,我假设您有理由将方法保留在类中。 在这种情况下,您应该尝试以下操作:
class wordicts:
@staticmethod
def listsplit(text):
l = text.split(" ")
return l
@staticmethod
def tword(text):
l = wordicts.listsplit(text)
return l
hw = "One Two Three Four Five"
print(wordicts.tword(hw))