471,052 Members | 1,246 Online
Bytes | Software Development & Data Engineering Community
Post +

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 471,052 software developers and data experts.

Re: Cancel instance create

Fredrik Lundh wrote:
Aigars Aigars wrote:
>I want MyClass to perform some tests and if them fail, I do not want
instance to be created.
If you do not want the instance created at all, you would have to write
a custom .__new__ method, but that is tricky, something I would have to
look up how to do, and most likely not needed. Fredrik's solution below
is much easier and the one I would use if at all possible.
>But in code I wrote instance is created and also has parameters, that
it should not have in case of tests failure.

Is there a way to perform tests in MyClass.__init__ and set instance
to None without any parameters?

if you want construction to fail, raise an exception.


def __init__(self):
At this point, you have an instance of your class bound to local name
'self'. Usually, its only individual attributes are (in 3.0, anyway, as
far as I can tell) .__class__ and an empty .__dict__. Of course, it
inherits class and superclass attributes, but it is otherwise blank.
(The main exception would be if you were inheriting from an immutable
class that set attributes in .__new__, but then you would not be writing
self.param = "spam"
Test = False
if Test: # please don't use explicit tests for truth
print "Creating instance..."
raise ValueError("some condition failed")

(pick an exception class that matches the actual error, or create your
own class if necessary)
Once the exception gets disposed of (if not before), the blank instance
gets unbound from 'self' and since it does not get bound to anything
else, it becomes eligible for garbage collection.


Sep 6 '08 #1
0 1220

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

6 posts views Thread by Patrick Coghlan | last post: by
4 posts views Thread by Graham Charles | last post: by
reply views Thread by Fredrik Lundh | last post: by
reply views Thread by leo001 | last post: by

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.