Как создать список объектов, который не очищается при вызове более одного раза - PullRequest
0 голосов
/ 20 ноября 2018

Моя проблема

в init Я объявляю две переменные списка, которые называются nlist и rlist.

Затем в методе add_neighour Я добавляюобъект (router2) с именем router2.__routername для списка объектов с именем self.nlist.

class Router:

    def __init__(self, routername):

        self.__routername = routername

        self.nlist = []
        self.rlist = []

    def print_info(self):

        print(self.nlist)

        print("  ", self.__routername, sep="")
        print("    N: ", ", ".join(sorted(self.nlist)), sep="")
        print("    R: ", ", ".join(sorted(self.rlist)), sep="")

    def add_neighbour(self, router2):
        self.nlist.append(router2.__routername)

        print(self.nlist)

Я вызываю код внутри while True, который ждет определенной команды:

Команда P предназначена для печати информации

    if command == "P":
        routername = input("Enter router name: ")

        if routername not in mydict:
            print("Router was not found.")
        else:
            router = Router(routername)
            router.print_info()

Команда C предназначена для объединения двух маршрутизаторов.(например, добавление имени router2s router2.__routername в список соседей self.nlist router1.

Это происходит class Router внутри метода add_neighbour, который принимает другой маршрутизатор в качестве параметра.

    elif command == "C":
        router1 = input("Enter 1st router: ")
        router2 = input("Enter 2nd router: ")

        router1 = Router(router1)
        router2 = Router(router2)

        router1.add_neighbour(router2)
        router2.add_neighbour(router1)

Добавление идет нормально, и когда я print(self.nlist) в конце показывает, что список был обновлен с добавленным элементом, который я хотел, однако при вызове функции print_info и попытке печати sorted(self.nlist) Она печатаетпустой список.

Понятия не имею, почему. Должен ли я объявить список объектов другим способом / местом?

или

добавить значения в список по-другому?

моя цель: успешно напечатать self.nlist в методе print_info. Успешная печать означает, что он печатает что-то еще, кроме пустого списка.

Я пыталсяищу ответы из нескольких постов. Извините, если этот пост дублирован и ужасно написан.

Весь код: (в процессе, как вы можете видеть ...)

class Router:

    def __init__(self, routername):

        self.__routername = routername

        self.nlist = []
        self.rlist = []

    def print_info(self):

        print(self.nlist)

        print("  ", self.__routername, sep="")
        print("    N: ", ", ".join(sorted(self.nlist)), sep="")
        print("    R: ", ", ".join(sorted(self.rlist)), sep="")

    def add_neighbour(self, router2):
        self.nlist.append(router2.__routername)

        print(self.nlist)


def main():
    mydict = {}

    routerfile = input("Network file: ")

    while True:
        command = input("> ")
        command = command.upper()

        if command == "P":
            routername = input("Enter router name: ")

            if routername not in mydict:
                print("Router was not found.")
            else:
                router = Router(routername)
                router.print_info()


            pass

        elif command == "PA":
            pass

        elif command == "S":
            pass

        elif command == "C":
            router1 = input("Enter 1st router: ")
            router2 = input("Enter 2nd router: ")

            router1 = Router(router1)
            router2 = Router(router2)

            router1.add_neighbour(router2)
            router2.add_neighbour(router1)

            pass

        elif command == "RR":
            pass

        elif command == "NR":
            routername = input("Enter a new name: ")
            router = Router(routername)
            if routername not in mydict:
                mydict[routername] = router
            else:
                print("Name is taken.")

            pass

        elif command == "NN":
            pass

        elif command == "Q":
            print("Simulator closes.")
            return

        else:
            print("Erroneous command!")
            print("Enter one of these commands:")
            print("NR (new router)")
            print("P (print)")  
            print("C (connect)")
            print("NN (new network)")
            print("PA (print all)")
            print("S (send routing tables)")
            print("RR (route request)")
            print("Q (quit)")

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