Я делаю карточную игру на питоне. Я использовал код класса стека, который нашел в сети:
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]
Когда я запускаю это, все в порядке, однако, когда я пытаюсь вызвать какое-либо поведение, моя программа просит меня передать значение для себя, как если бы это был параметр. Я чувствую, что схожу с ума...
Когда этот код запускается:
Cards = []
Cards = Stack()
Cards = Stack.push(15)
Cards = Stack.peek()
Cards = Stack.pop()
При запуске 3-й строки отображается эта ошибка:
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'
Кроме того, если Cards
является экземпляром Stack
, почему вы звоните Cards = Stack.push(15)
? Разве вы не должны просто делать что-то вроде Cards.push(15)
?
Вы не должны переназначать Cards
в каждой строке. Cards
— это объект Stack
, он должен оставаться неизменным. Его следует использовать как переменную, с которой вы вызываете все остальные методы.
Cards = Stack()
Cards.push(15)
item = Cards.peek()
item2 = Cards.pop() # item == item2
После объявления Cards
экземпляром Stack
вам больше не нужно ссылаться на Stack
. Просто используйте Cards
.
Cards = Stack()
Cards.push(15)
x = Cards.peek()
y = Cards.pop()
Кроме того, первая строка кода Cards = []
бесполезна, так как вы сразу же переназначаете Cards
что-то другое.
Проверьте эту ссылку medium.com/quick-code/understanding-self-in-python-a3704319e5f0 Они охватывают концепцию
self
с Python очень глубоко и должны дать вам четкое представление о том, почему вы получаете эту ошибку.