My personal preference in such matters is that “instantiating an object” is one thing, and “loading it with data” is another thing entirely. Therefore, I will define the constructor to initialize the object and to set a loaded property to False. Then, I will define a separate load() method. I will also define a must_be_loaded() method that returns “self” if the object is loaded (as expected), or will die if it is not. This “pass-thru method” is used in every getter-method that retrieves data from the object.