为什么我的程序要求我输入自我价值?

时间:2019-04-10 18:42:30

标签: python class oop

我正在用python制作纸牌游戏。我将代码用于在网上找到的堆栈类:

class Stack:

  def __init__(self):
         self.items = []

  def isEmpty(self):
     return self.items == []

  def push(self, item):
     self.items.insert(0,item)

  def pop(self):
     return self.items.pop(0)

  def peek(self):
     return self.items[0]

运行此命令时,一切正常,但是当我尝试调用任何行为时,程序要求我为self传递一个值,就好像它是一个参数一样。我觉得我疯了...

运行此代码时:

  Cards = []
  Cards = Stack()
  Cards = Stack.push(15)
  Cards = Stack.peek()
  Cards = Stack.pop()

运行第三行时,显示此错误:

TypeError: push() missing 1 required positional argument: 'item'

当我像这样传递None的值时

Cards = Stack.push(None,15)

我还有另一个错误:

self.items.insert(0,item)
AttributeError: 'NoneType' object has no attribute 'items'

2 个答案:

答案 0 :(得分:3)

在将Cards声明为Stack的实例之后,您不再需要引用Stack。只需使用Cards

Cards = Stack()
Cards.push(15)
x = Cards.peek()
y = Cards.pop()

此外,代码Cards = []的第一行也没有用,因为您立即将Cards重新分配为其他内容。

答案 1 :(得分:2)

您不应在每行上重新分配CardsCardsStack对象,它需要保持不变。应该将它用作调用所有其他方法的变量。

Cards = Stack()
Cards.push(15)
item = Cards.peek()
item2 = Cards.pop() # item == item2