My knee jerk reaction is to not add arguments to the `__init__` signature, but add this information as an attribute at some later point (and make sure where ever you use it can deal with `self.canvas is None`.