input: Write a function to create a double linked list in Python with methods to append, prepend, and reverse the list. The function should return the head of the list after completing the operations. If the list is empty after the operations, return None.
  assert double_linked_list().append(1).append(2).prepend(0).reverse().head.data == 2
  assert double_linked_list().prepend(1).prepend(2).head.data == 2
  assert double_linked_list().append(1).append(2).head.data == 1
  assert double_linked_list().reverse().head == None
output: class Node:
      def __init__(self, data):
          self.data = data
          self.next = None
          self.prev = None
  
  class double_linked_list:
      def __init__(self):
          self.head = None
          self.tail = None
  
      def append(self, data):
          new_node = Node(data)
          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
          return self
  
      def prepend(self, data):
          new_node = Node(data)
          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
          return self
  
      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
          return self
  
      def __repr__(self):
          return f"double_linked_list().append({self.head.data}).append({self.tail.data})" if self.head else "double_linked_list()"