def __pre_init(self, owner, rotation, origin, level=None): """Here we face the awkward situation of requiring a fourth init function. It is called like __init, but before other parts are inited via super(). This is necessary since some attributes are used by these other parts.""" self.owner = owner if level is None: level = 0 if self.owner is None else self.owner.settler_level self.level = level self.rotation = rotation if self.rotation in (135, 315): # Rotate the rect correctly self.position = ConstRect(origin, self.size[1] - 1, self.size[0] - 1) else: self.position = ConstRect(origin, self.size[0] - 1, self.size[1] - 1)