为什么在类中调用另一个函数时出现“未定义名称”错误消息?

时间:2019-03-27 12:38:31

标签: python

函数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))

2 个答案:

答案 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))