Python: 无法在单独的函数中调用函数? (未定义名称 'getItemClassiness')

Python: Unable to call function within a seperate function? (undefined name 'getItemClassiness')

由于某种原因,getClassiness 函数不起作用,因为它无法调用辅助函数 getItemClassiness。这可能是什么原因?谢谢!

class Classy(object):
    def __init__(self):
        self.items = []
    
    def addItem(self, item):
        self.items.append(item)
        
    def getItemClassiness(item):
        if item == "tophat":
            return 2
        if item == "bowtie":
            return 4
        if item == "monocle":
            return 5
        return 0
    
    
    def getClassiness(self):
        total = 0
        for item in self.items:
            x = getItemClassiness(item)
            total += x
        return total

# Test cases

me = Classy()

# Should be 0
print(me.getClassiness())


# Should be 2
me.addItem("tophat")
print(me.getClassiness())

me.addItem("bowtie")
me.addItem("jacket")
me.addItem("monocle")
print(me.getClassiness())
# Should be 11


me.addItem("bowtie\n")
print(me.getClassiness())
# Should be 15

您可以使用此 class 来表示 classy 某人或某物的状态。 “优雅”可与“花哨”互换。如果你添加看起来很花哨的项目,你会增加你的“classiness”。在“Classy”中创建一个函数,将字符串作为输入并将其添加到“items”列表中。另一种方法应该根据项目计算“classiness”值。以下项目具有与之相关的 classiness 点数:“tophat”= 2 “bowtie”= 4 “monocle”= 5 其他所有东西都有 0 点。使用下面的测试用例来指导您!

在第 21 行调用 class 方法时没有使用 self 关键字。

 x = self.getItemClassiness(item)

类似地,第 8 行中的 self 关键字需要作为 getItemClassiness

函数定义的参数
def getItemClassiness(self, item):

您应该将 getItemClassiness 声明为静态方法,因为它不需要特定的实例。然后您可以像调用实例方法一样调用该函数。

    @staticmethod
    def getItemClassiness(item):
        ...
    
    
    def getClassiness(self):
        ...
        for item in self.items:
            x = self.getItemClassiness(item)

但是最后一个测试用例仍然不会给你 15,因为 "bowtie" != "bowtie\n"。如果您打算忽略字符串开头或结尾的白色 space,请使用 str.strip().