Как определить и использовать функцию вне класса? - PullRequest
0 голосов
/ 31 марта 2020

В следующем коде для реализации связанного списка в Python3. Как определить и вызвать такие функции, как reverse () и display () вне класса. Например, как создать функцию, которая выполняет такие операции, как display () и recerse (). Как мне передать объект LinkedList и как получить доступ к его членам, чтобы я мог выполнять нужные операции?

PS: я удалил другие функции, потому что не смог опубликовать этот вопрос. Я не спрашиваю об импорте файла класса для использования в других .py файлах.

class Node:
    def __init__(self,data):
        self.data = data
        self.next = None

class LinkedList:
    def __init__(self):
        self.head = None

    def display(self):
        curr = self.head
        while curr != None:
            print(curr.data + '->', end = ' ')
            curr = curr.next
        print('NULL')
    def append(self, data):
    '''
    statements....
    '''
    def length(self):
        ptr = self.head
        count = 0
        while ptr.next != None:
            count += 1
            ptr = ptr.next
        print(count+1)

    def reverse(self):
        pre = None
        cur = self.head
        while cur != None:
            temp = cur.next
            cur.next = pre
            pre = cur
            cur = temp
        self.head = pre
        self.display()

l = LinkedList()
l.append('A')
l.append('B')
l.append('C')
l.append('D')
l.prepend('E')
l.display()

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

Я добавил метод prepend и append для вас, я не уверен, что это то, на что вы ссылались. Кроме того, если вы ищете методы stati c vs класса, вы можете проверить их здесь: Метод класса vs stati c метод в Python

С stati * Методы 1014 *. Вы можете возвращать экземпляры указанного класса, используя аргументы метода stati c. Проверьте ссылку выше, чтобы использовать функции класса вне их экземпляров.

Вот код Python:

class Node:
    def __init__(self,data):
        self.data = data
        self.next = None

class LinkedList:
    def __init__(self):
        self.head = None

    def display(self):
        curr = self.head
        while curr != None:
            print(curr.data + '->', end = ' ')
            curr = curr.next
        print('NULL')

    def append(self, data):
        data_node = Node(data)
        data_node.next = self.head
        self.head = data_node

    def prepend(self, data):
        ptr = self.head
        while ptr.next != None:
            ptr = ptr.next
        ptr.next = Node(data)

    def length(self):
        ptr = self.head
        count = 0
        while ptr.next != None:
            count += 1
            ptr = ptr.next
        print(count+1)

    def reverse(self):
        pre = None
        cur = self.head
        while cur != None:
            temp = cur.next
            cur.next = pre
            pre = cur
            cur = temp
        self.head = pre
        self.display()

l = LinkedList()
l.append('A')
l.append('B')
l.append('C')
l.append('D')
l.prepend('E')
l.display()
0 голосов
/ 31 марта 2020

не уверен, что я правильно понимаю ваш вопрос, но если мне кажется, что вы просто хотите взять весь код, минус программный код (от "l = LinkedList ()" в вашем примере), и сохраните его в файл python, затем в начале любого кода python, в котором нужно использовать свой класс, импортируйте свой файл.

Если файл вашего класса не находится в той же папке, что и код из которого вы будете sh использовать класс, вам нужно будет сохранить файл класса в каталоге по вашему пути:

import sys
print(sys.path)

и, если вы sh, добавить каталог в свой каталог. путь, вы можете:

sys.path.append('<directory')

В этот момент, как только вы

import LinkedList

(при условии, что ваш файл класса называется LinkedList.py), вы сможете определять переменные, используя ваш Класс и использовать его так же, как в вашем примере, так что ваш файл кода будет выглядеть примерно так:

import LinkedList

l = LinkedList()
l.append('A')
l.append('B')
l.append('C')
l.append('D')
l.prepend('E')
l.display()

Или я просто не правильно читаю ваш вопрос?

...