Sometimes it looks reasonable to use __init__ as initialization method for already existing object, i.e.:
class A():
    def __init__(self, x):
        self.x = x
    def set_state_from_file(self, file):
        x = parse_file(file)
        self.__init__(x)
As alternative to this implementation I see the following:
class A():
    def __init__(self, x):
        self.init(x)        
    def init(self, x):
        self.x = x
    def set_state_from_file(self, file):
        x = parse_file(file)
        self.init(x)
It seems to me as over-complication of code. Is there any guideline on this situation?
Update: There is a case when it is definitely not an alternate constructor case: unpickling. During unpickling, pickle first creates an instance and only then sets its state.
 
     
    