Ошибка в 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 шт):

Автор решения: CrazyElf

Для метода 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
→ Ссылка