在评估定义为类的列表的长度时

时间:2016-02-28 04:04:03

标签: python class oop

例如,我有一个名为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

为什么会这样,我该如何处理?

3 个答案:

答案 0 :(得分: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方法命名约定一致。

答案 1 :(得分:1)

因为Select Vizite.Id , Vizite.Numar , Vizite.Data , Vizite.DataStart , Vizite.DataEnd , Case When DataStart != Null And DataEnd != Null And (Select Count(Id) From AngajatiVizite Where Vizite.Id = AngajatiVizite.IdVizita) > 0 Then 1 Else 0 End As Programat From Vizite Order By Programat, Data self.number_of_elements不一样!

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

答案 2 :(得分:0)

self.number_of_elements是一个函数,因此它的值既不是零也不是1