例如,我有一个名为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
为什么会这样,我该如何处理?
答案 0 :(得分:3)
那是因为你没有调用调用方法self.number_of_elements
;您只是测试它是否等于0
或1
。
修改您的代码以使用以下语法实际调用该方法: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