input: Write a function that creates a doubly linked-list in Python which supports appending and prepending nodes, and also provides a method to reverse the list. The function should include a Node class and a DoubleLinkedList class, and should be able to handle the following scenarios:
  
  
  assert append(5)  # [5]
  assert append(10)  # [5, 10]
  assert prepend(2)  # [2, 5, 10]
  assert reverse()  # [10, 5, 2]
  assert append(15)  # [10, 5, 2, 15]
  
  
  Expected output:
  
  [5]
  [5, 10]
  [2, 5, 10]
  [10, 5, 2]
  [10, 5, 2, 15]
  
output: class Node:
      def __init__(self, value):
          self.value = value
          self.next = None
          self.prev = None
  
  class DoubleLinkedList:
      def __init__(self):
          self.head = None
          self.tail = None
  
      def append(self, value):
          new_node = Node(value)
          if not self.head:
              self.head = new_node
              self.tail = new_node
          else:
              new_node.prev = self.tail
              self.tail.next = new_node
              self.tail = new_node
  
      def prepend(self, value):
          new_node = Node(value)
          if not self.head:
              self.head = new_node
              self.tail = new_node
          else:
              new_node.next = self.head
              self.head.prev = new_node
              self.head = new_node
  
      def reverse(self):
          current = self.head
          while current:
              current.next, current.prev = current.prev, current.next
              current = current.prev
          self.head, self.tail = self.tail, self.head