Here's the completed code:
```
class BinarySearchTree:
def __init__(self):
self.root = None
def in_order(self, current_node):
# Check if current_node exists
if current_node:
# Call recursively with the appropriate half of the tree
self.in_order(current_node.left_child)
# Print the value of the current_node
print(current_node.data)
# Call recursively with the appropriate half of the tree
self.in_order(current_node.right_child)
bst = BinarySearchTree()
bst.in_order(bst.root)
```
The code defines a BinarySearchTree class with an in_order method that performs an in-order traversal of the tree. It takes a current_node parameter that specifies the root of the subtree to traverse. It starts by checking whether the current node exists. If it does, it calls the in_order method recursively on the left child of the current node, which traverses the left subtree. Then, it prints the data of the current node, which is the root of the subtree. Finally, it calls the in_order method recursively on the right child of the current node, which traverses the right subtree. This process continues until all nodes in the tree have been visited. Finally, it creates a BinarySearchTree object and calls the in_order method with the root of the tree as the parameter to perform an in-order traversal of the entire tree.