I tend to keep my class methods related to creating new instances. So `SudokuReader.parse_file` might return a `SudokuReader` instance from the given file.

In OOP, objects encapsulate both state *and* behavior. Even though it doesn't touch any state, parsing a line is a core part of reading a sudoku and should probably be part of the behavior of the object that does the reading. Having `parse_line` as a private method on the instance would provide better encapsulation and remove the somewhat strange division of responsibilities here.