Could you explain why you've implemented a deferred loading mechanism? It appears that any attribute access (or at least those that trigger a call to ```__getattr__```) will cause the entire file to be loaded (and the filename parsed). Why not create a field with all the attributes initialised to None or similar with ```__init__(self)``` taking no args other than self. If the user wants to load a file, they can call ```read(self, filename)```. Alternatively, if an 'empty' field is no use, why not load on construction with ```__init__(self, filename)``` taking a filename and making ```read()``` private i.e. ```_read(self)```. Perhaps @rhattersley could comment as well.