2015-02-07 2 views
0

Прежде всего это домашнее задание, над которым я работаю, но мне действительно нужна помощь при ошибке.Вызов класса для тестирования - Python

Таким образом, проект предназначен для реализации вектора (всего списка, кроме имени для этого проекта), используя класс Array. Класс массива, который я использую, можно найти here.

Моя ошибка в том, что каждый раз, когда я пытаюсь вызвать мой код, чтобы проверить это, определенно GetItem и SetItem функции, я ветер с указанием ошибки:

builtins.TypeError: 'type' object does not support item assignment 

Ниже класс Я сейчас строю, (пока что кажется, что только len и содержит).

class Vector: 
    """Vector ADT 
    Creates a mutable sequence type that is similar to Python's list type.""" 
    def __init__(self): 
     """Constructs a new empty vector with initial capacity of two elements""" 
     self._vector = Array(2) 
     self._capacity = 2 
     self._len = 0 

    def __len__(self): 
     """Returns the number of items in the vector""" 
     return self._len 

    def __contains__(self, item): 
     """Determines if the given item is stored in the vector""" 
     if item in self._vector: 
      return True 
     else: 
      return False 

    def __getitem__(self, ndx): 
     """Returns the item in the index element of the list, must be within the 
     valid range""" 
     assert ndx >= 0 and ndx <= self._capacity - 1, "Array subscript out of range" 
     return self._vector[ndx] 

    def __setitem__(self, ndx, item): 
     """Sets the elements at position index to contain the given item. The 
     value of index must be within a valid range""" 
     assert ndx >= 0 and ndx <= self._capacity - 1, "Array subscript out of range" 
     self._vector[ndx] = item 

    def append(self, item): 
     """Adds the given item to the list""" 
     if self._len < self._capacity: 
      self._vector[self._len] = item 
      self._len += 1 

Я пытаюсь вызвать код, либо набрав:

Vector()[i] = item 

или

Vector[i] = item 

Однако, попытка:

Vector[i] = item 

дает мне ошибку, и:

Vector()[i] = item 

На самом деле, похоже, что-то не делает ничего, кроме как вызвать ошибку.

+0

Может быть, вам просто хотите использовать 'list' вместо этого класса Array? – nbro

ответ

2

Вам необходимо создать экземпляр вашего класса Vector. Попробуйте:

vector = Vector() 
vector[0] = 42 

ошибка означает, что вы пытаетесь ошибочно приписать самой Vector класса, который не имеет особого смысла.

0

Попробуйте использовать вместо вместо назначения значения.

0

Vector - класс; Vector() создает экземпляр этого класса.

Так

Vector[i] = item 

выдает ошибку: Vector.__setitem__ является метод экземпляра (работает против экземпляра класса, то есть объект), а не classmethod (работает против класса). (Вы могли бы теоретически сделать это classmethod, но у меня есть проблема, изображающие случай использования, где это будет иметь смысл.)

С другой стороны,

Vector()[i] = item 

# 1. creates a Vector() object 
# 2. calls {new_object}.__setitem__(self, i, item) 
# 3. doesn't keep any reference to {new_object}, so 
#  (a) you have no way to interact with it any more and 
#  (b) it will be garbage-collected shortly. 

Попробуйте

v = Vector() 
v[i] = item 

print(item in v) # => True 
Смежные вопросы