Voglio impostare una classe che verrà interrotta durante la creazione dell'istanza in base al valore dell'argomento passato alla classe. Ho provato un paio di cose, uno dei quali è sollevare un errore nel metodo __new__
:Come interrompere la creazione di istanze dell'oggetto in Python?
class a():
def __new__(cls, x):
if x == True:
return cls
else:
raise ValueError
Questo è quello che speravo che sarebbe accaduto:
>>obj1 = a(True)
>>obj2 = a(False)
ValueError Traceback (most recent call last)
obj1
esiste, ma non lo fa obj2
.
Qualche idea?
non dovresti sovrascrivere '__init __ (self, ...)'? –
@matt b. Non è così semantico se poi l'intento è fermare la creazione di oggetti. Funziona comunque. – aaronasterling
@AaronMcSmooth: perché alzare un'eccezione in '__new__' è preferibile aumentarne uno in' __init__'. Il risultato sembra lo stesso per me e '__init__' è dove tutto l'altro codice di inizializzazione va. Perché non dovrebbe andare anche lì? – Arlaharen