Well in C++ the aformented idom (construct on first use) is quite common. I however like to make it also in python, together with references/pointers that often accompany this. Just a quick example (half pseudo code):
class data:
def __init__(self, file):
self.raw_data = read_file()
#takes upto 1 minute and should only be done if necessary.
self.temperature = temp_conv() #again takes a lot of time
class interface:
def __init__(self, plot, data, display_what):
self.dat = data
self.disp = display_what
self.current_time = 0
#...
def display():
#display the correct data (raw_data) or temperature
#mainly creating a matplotlib interface
self.img = self.axes.imshow(self.displ[:,:,self.current_time],interpolation='none')
#what to display actually can be changed through callbacks
def example_callback():
self.disp = self.dat.temperature
self.img.set_data(self.displ[:,:,self.current_time])
dat = data("camera.dat")
disp = interface(dat, raw_data)
disp.display()
Now the first approach is to simply create everything at start, but this takes several minutes in total. And probably more in the future.
So now I wish to make it so that I only "calculate" what is needed the moment I actually get the reference. So not at construction of the data object.
Now I could do this at the callback functions, test there if data has already calculated the correct function and if not calculate it. But this feels very annoying and not good programming ettiquette (the interface suddenly is responsible for checking & creating data).
So I'd like to have the data class to contain itself. Remove the self.temperature = temp_conv()
and replace it with a structure that puts it initially at None
but when you try to read it for the first time it executes the temp_conv()
script.