Chcę ustawić klasę, która zostanie przerwana podczas tworzenia instancji na podstawie wartości argumentu przekazanego do klasy. Próbowałem kilka rzeczy, jedną z nich jest podnoszenie błąd w metodzie __new__
:Jak przerwać tworzenie instancji obiektu w Pythonie?
class a():
def __new__(cls, x):
if x == True:
return cls
else:
raise ValueError
To jest to, czego oczekiwałem by się stało:
>>obj1 = a(True)
>>obj2 = a(False)
ValueError Traceback (most recent call last)
obj1
istnieje, ale nie obj2
.
Wszelkie pomysły?
nie powinieneś zastąpić '__init __ (self, ...)' zamiast? –
@matt b. Nie jest to tak semantyczne, jeśli następnie intencją jest zatrzymanie tworzenia obiektów. To działa. – aaronasterling
@AaronMcSmooth: Dlaczego podniesienie wyjątku w '__new__' byłoby lepsze niż podniesienie wyjątku w' __init__'. Rezultat wydaje mi się taki sam, a "__init__" to miejsce, w którym znajduje się cały inny kod inicjalizacyjny. Dlaczego nie powinieneś tam pojechać? – Arlaharen