Czasami wygląda rozsądnie używać __init__
jako metoda inicjalizacji dla już istniejącego obiektu, tj:Czy można __init__ używać jako normalnej metody inicjalizacji, a nie konstruktora?
class A():
def __init__(self, x):
self.x = x
def set_state_from_file(self, file):
x = parse_file(file)
self.__init__(x)
Jako alternatywę dla tej implementacji widzę następujące:
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)
Wydaje mi jak nad- komplikacja kodu. Czy istnieją jakieś wytyczne dotyczące tej sytuacji?
Dlaczego nie ma funkcji non-member aby analizować ten plik i utworzyć nową instancję? Wygląda na to, że będziesz musiał ponownie napisać klasę za każdym razem, gdy chcesz ją zainicjować z innego źródła, co narusza zasadę [Odpowiedzialności za jedno działanie] (https://en.wikipedia.org/wiki/Single_responsibility_principle). –
@Peter Wood, a co z '__init__' w' __setstate__'? – Sklavit