Ошибка в python уровня - новичок в ООП
Есть код:
class Hash_table:
def __init__(self):
self.hash_table = [[] for i in range(HASH_SIZE)]
def add_word(self, word:str):
hash_id = hash(word)
hash_id = hash_id if hash_id >= 0 else -hash_id
hash_id = hash_id % HASH_SIZE
if not (word in self.hash_table[hash_id]):
self.hash_table[hash_id].append(word)
with open("input.txt", "r") as f:
line = f.read().split()
for word in line:
if word != "" and word != "\n" and word != " ":
hash_table.add_word(word)
Выводится ошибка
File "/home/chort/ЛабыАСД/lab14.py", line 20, in hash_table.add_word(word) TypeError: add_word() missing 1 required positional argument: 'word'
Как это исправить, и что я сделал не так?
Ответы (1 шт):
Для метода add_word первым параметром указан параметр self, значит это метод экземпляра класса и вызывать его можно только предварительно создав экземпляр класса:
hash_table = Hash_table()
hash_table.add_word(word)
Но вообще у вас там много разных ошибок ещё и с табуляцией и вообще странно код выглядит, должна была быть другая ошибка, видимо, вы переименовывали класс.
В частности в этом куске кода нехватает табуляции в if:
def add_word(self, word:str):
hash_id = hash(word)
hash_id = hash_id if hash_id >= 0 else -hash_id
hash_id = hash_id % HASH_SIZE
if not (word in self.hash_table[hash_id]):
self.hash_table[hash_id].append(word)
Должно быть так:
def add_word(self, word:str):
hash_id = hash(word)
hash_id = hash_id if hash_id >= 0 else -hash_id
hash_id = hash_id % HASH_SIZE
if not (word in self.hash_table[hash_id]):
self.hash_table[hash_id].append(word)
И константа HASH_SIZE нигде не задана. Вероятно, это константа класса:
class Hash_table:
HASH_SIZE = 1024
def __init__(self):
self.hash_table = [[] for i in range(Hash_table.HASH_SIZE)]
...
hash_id = hash_id % Hash_table.HASH_SIZE