计算定义为类的列表的长度时

2024-04-25 23:47:20 发布

您现在位置:Python中文网/ 问答频道 /正文

例如,我得到一个名为stack的类

class stack: #Will be used for probable files!
    def __init__(self):
            self.data = []

    def add(self, element):
            self.data.append(element)

    def number_of_elements(self):
            return len(self.data)

    def stackType(self):
        if self.number_of_elements == 0:
            return 0
        elif self.number_of_elements == 1:
            return 1
        else:
            return -1

然后我会这样做:

foo = stack()
print foo.stackType()

我得到了-1,但是我期望返回1

为什么会这样?我该怎么处理


Tags: ofselfnumberdatareturnfoostackdef
3条回答

这是因为您没有调用调用方法self.number_of_elements;您只需测试它是否等于01

使用以下语法修改代码以实际调用方法:self.number_of_elements()[注意使用()来调用方法]:

def stackType(self) :
        if self.number_of_elements() == 0 :
                return 0
        elif self.number_of_elements() == 1 :
                return 1
        else :
                return -1

你也可以这样写:

def stack_type(self):
    n = self.number_of_elements()
    return -1 if n > 1 else n

这将是一种改进,因为number_of_elements()将只调用一次。在您的代码中,该方法可以被调用两次。我重命名了该函数,使之与PEP8中规定的Python方法命名约定一致

因为self.number_of_elementsself.number_of_elements()不一样

前者是对函数的引用,后者是对实际计算堆栈长度的函数的调用

元素的self.number\是一个函数,所以它的值既不是0也不是1

相关问题 更多 >

    热门问题