Using object-oriented programming principles, write Python code to implement a graph data structure. Then, apply the depth-first search algorithm on the populated graph to traverse all vertices in a recursive manner. Ensure your implementation handles any edge cases and produces correct results. Document your code with clear explanations and comments.
This prompt doesn't seem malicious.