I want to set up a class that will abort during instance creation based on the value of the the argument passed to the class. I\'ve tried a few things, one of them being raising
Just raise an exception in the initializer:
class a(object):
def __init__(self, x):
if not x:
raise Exception()
When you override __new__
, dont forget to call to super!
>>> class Test(object):
... def __new__(cls, x):
... if x:
... return super(Test, cls).__new__(cls)
... else:
... raise ValueError
...
>>> obj1 = Test(True)
>>> obj2 = Test(False)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 6, in __new__
ValueError
>>> obj1
<__main__.Test object at 0xb7738b2c>
>>> obj2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'obj2' is not defined
Simply returning the class does nothing when it was your job to create an instance. This is what the super class's __new__
method does, so take advantage of it.