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

cotxawn7  于 2022-12-02  发布在  Python
关注(0)|答案(3)|浏览(206)

由于某种原因,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

您可以使用这个类别来表示某人或某事有多优雅。“优雅”可以和“花哨”互换。如果您加入看起来花哨的项目,您会增加您的“优雅”。在“优雅”中建立一个函数,以字串作为输入,并将它加入到“项目”清单中。另一个方法应该根据项目来计算“优雅”值。下列项目有相关的优雅点数:“大礼帽”= 2“领结”= 4“单片眼镜”= 5其他都得0分。使用下面的测试案例来指导你!

zwghvu4y

zwghvu4y1#

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

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

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

vlurs2pr

vlurs2pr2#

在第21行中,对类方法的调用没有使用self关键字。

x = self.getItemClassiness(item)

同样,在self关键字的第8行,需要作为getItemClassiness函数定义的参数

def getItemClassiness(self, item):
nvbavucw

nvbavucw3#

这是我用静态方法所做的。在测试用例中得到了正确的输出。

class Classy(object):
def __init__(self):
    self.items = []
    
def addItem(self, item):
    self.items.append(item)
    
@staticmethod
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 = self.getItemClassiness(item)
        total += x
    return total

相关问题