Почему значение моего объекта уменьшается каждый раз, когда я использую оператор +? - PullRequest
0 голосов
/ 29 мая 2020

Я относительно новичок в Python. Я реализовал структуру данных tr ie и сейчас тестирую ее. Однако по какой-то причине мой объект становится None каждый раз, когда я использую оператор '+'.

class Trie:
    class Node:
        def __init__(self):
            self.count = 0
            self.children = [None] * 26

    def __init__(self):
        self.root = self.Node()

    def __add__(self, string):
        curr = self.root

        for i in range(len(string)):
            index = ord(string[i]) - ord('a')

            if curr.children[index] is None:
                curr.children[index] = self.Node()

            curr = curr.children[index]

        curr.count = curr.count + 1

    def __contains__(self, string):
        curr = self.root

        for i in range(len(string)):
            index = ord(string[i]) - ord('a')

            if curr.children[index] is None:
                return False

            curr = curr.children[index]

        return curr.count > 0

Мой тестовый класс выглядит следующим образом:

import random
import string

from src.main.python.datastructures.trees.trie.trie import Trie


def generate_random_string():
    return ''.join([random.choice(string.ascii_lowercase) for _ in range(32)])


def test_trie():
    for i in range(100):
        random_string_list = []
        t = Trie()

        for j in range(100):
            random_string = generate_random_string()
            random_string_list.append(random_string)
            t += random_string # After this line, t becomes None

        for random_string in random_string_list:
            assert random_string in t

            next_random_string = generate_random_string()

            if random_string_list not in next_random_string:
                assert next_random_string not in t

Как указано в комментарии к коду, когда я отлаживал код, t становится None, поэтому я получаю ошибку типа, которая выглядит примерно как TypeError: unsupported operand type(s) for None and str.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...