Python类中的私有辅助函数出现"global name <方法名> is not defined"错误

11 投票
1 回答
23862 浏览
提问于 2025-04-18 12:45

我正在创建一个类,这个类里面有一个字典(dict),并且有一些方法可以根据字典里的数据提取信息。每个键对应一个字符串的列表。列表中的每个字符串都是这种格式:name(data).

我刚开始学习Python,之前主要用的是Java。我创建了一些私有的辅助函数,这些函数是为了在我的公共方法中使用。下面是一个例子,来说明我想做的事情:

def _getItemName(item):
    str = ""
    for c in item:
        if c!= '(':
            str += c
        else:
            break
    return str

这个方法在几个公共方法中被使用,就像这个例子:

def getCertainItemsByName(self, key, name):
    foundItems = []
    for item in self.itemMap[key]:
        if _getItemName(item) == name:
            foundItems.append(item)
    return foundItems

但是我遇到了一个错误,提示类似于“全局名称‘_getItemName’未定义”。我意识到我可以把这个方法放在类外面,但这个方法是特定于这个类的,所以我不想这样做。那我该怎么做才好呢?

1 个回答

19

在你的问题中,你缺少了 self;

def _getItemName(self, item):
    str = ""
    for c in item:
        if c!= '(':
            str += c
        else:
            break
    return str

def getCertainItemsByName(self, key, name):
    foundItems = []
    for item in self.itemMap[key]:
        if self._getItemName(item) == name:
            foundItems.append(item)

你应该了解一下 Python 中的 静态方法类方法实例方法

静态方法是一种特殊的函数。有时候,你会写一些属于某个类的代码,但这些代码根本不使用这个类的对象。比如:

class Pizza(object):
     @staticmethod
     def mix_ingredients(x, y):
         return x + y

     def cook(self):
         return self.mix_ingredients(self.cheese, self.vegetables)

想了解更多,可以访问 这里

撰写回答