Un problema con questa classe è che reset
non dà come risultato una A
di "appena costruita", che probabilmente sorprenderà le persone.
Se fosse o
class A:
def __init__(self, x):
self.x = x
def init(self, y):
self.y = y**2
def reset(self):
del(self.y)
o (più preferibilmente)
class A:
def __init__(self, x):
self.x = x
self.y = 0
def init(self, y):
self.y = y**2
def reset(self):
self.y = 0
quindi sarebbe meno cattivo .
Detto questo, non mi piace nessuna classe che abbia un setup
, gather members
, init
o qualunque metodo denominato, che gli utenti devono chiamare prima che lo scopo reale della classe possa essere Usato. Se hai veramente bisogno dell'inizializzazione a due fasi, restituisci un oggetto factory dalla prima chiamata e istanzia solo il secondo
class A:
def __init__(self, x, y):
self.x = x
self.y = y**2
# members can assume y exists
def defferedA(x):
def inner(y):
return A(x, y)
return inner