Ошибка типа: __init__() принимает 1 позиционный аргумент, но было дано 2-возникают ошибки при создании класса стека с помощью numPy

#python #arrays #numpy #stack

Вопрос:

Я хочу создать класс стека, используя массив numPy, но возникает эта ошибка

Ошибка типа: init() принимает 1 позиционный аргумент, но было дано 2

 import numpy as np

class Stack:
    def __init__(self):
        self.Stack =np.Stack([])

    def push(self,data):
            return self.Stack.append(data)
            print("stack overfolow")

    def pop(self):
        if len(self.Stack)==0:
            print("stack underflow")
        else:
            return self.Stack.pop()
    def __len(self):
        return len(self.Stack)

    def top(self):
        if len(self.Stack)==0:
            print("stack under flow")
        else:
            return self.Stack[len(self.Stack)-1]

    def is_empty(self):
        return len(self.Stack) == 0

    def is_full(self):
        return len(self.Stack) == self.limit


    def size(self):
        return len(self.Stack)
 

Комментарии:

1. По какой линии ? Не называйте свой класс так же, как атрибут

2. np.Stack не существует, значит ?

3. Заставьте это работать со списками, прежде чем пытаться сделать это с numpy.

4. Сообщите о полной ошибке, а не только о приближении от руки.

5. Было бы полезно, если бы вы показали код, который вызывает/создает ваш объект, то есть полный код, который мы можем вырезать, вставить и запустить самостоятельно, и полную трассировку стека, как просил кто — то другой.

Ответ №1:

Заменить self.Stack =np.Stack([]) на self.stack = np.stack([0,0])

Причина в том, что у numpy есть стек методов, который складывает 2 массива друг на друга, и для этого требуется что-то сложить. Также, используя нижний регистр вместо верхнего, вы следуете рекомендациям pep8.

Даже если это сработает, я считаю , что вы хотите np.stack заменить np.array , причина в том, что вам не нужно ничего складывать прямо сейчас, и вам нужно только возвращаемое значение стека, которое само по себе является np.массивом