Am 01.03.2011 07:49, schrieb David:
I have an idea that might clean up my code slightly, if I can make one
of my classes
clever enough to refuse to instantiate itself if a necessary condition
is not met.

I think that's too clever ;-). Instead, you could create a function which has the only and explicit purpose to decide wether or not to create the class, e.g.

def class_for_condition(condition):
    if condition:
        return MyClass()
    return None

and use this throughout your code, e.g.

my_object = class_for_condition(condition)

But to me, it sounds a bit like trouble in general. As Alan said, you have to deal with two options for my_object in the remaining code. I can't really judge without seeing what you want to do later on, but maybe you have the chance to branch on a higher abstraction level?

if condition:
    do_all_this_stuff() # do the things with my_object
else:
    do_the_other_stuff() # do the things you don't need my_object

Cheers,

Jan


Below I propose some example code that seems to achieve this, and I am
asking here
for feedback on it, because I have not written much python. So I might be doing
something unwise due to fiddling with things I don't totally understand.

My aim is that instead of writing this:

        class MyClass:
                pass

        condition = 0

        if condition:
                my_object = MyClass()
        else:
                my_object = None

I could instead write this:

        class MyClass_2:
                # put the if-test here inside the class

        my_object_2 = MyClass_2(condition)

to achieve the goal that (my_object_2 == None) when (condition == False).

I read the (ver 2.6) Python Language Reference
  Section 3.4.1. Basic customization
  Section 3.4.3. Customizing class creation

Most of the content there is way beyond my current understanding, but I came up
with the following code, which seems to work:

        class MyClass_2(object):
                def __new__(self, condition):
                        if condition:
                                return object.__new__(self)
                        else:
                                return None

        condition = 0
        my_object_2 = MyClass_2(condition)
        print my_object_2
        condition = 1
        my_object_2 = MyClass_2(condition)
        print my_object_2

Can anyone see any technical or style issues with that? Or
alternatively reassure me that it is completely ok?
Thanks.
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to