# What's up with Python's __init__ ?

This topic is 3712 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

I'm not entirely sure this problem is related to the __init__ method. It might be a flaw in the API I am using. Hell, maybe I'm just screwing up my tabs again. Either way, hopefully somebody may clue me in. As I understand, __init__ is not technically a constructor because the class is already instantiated when it is called, but I can't seem to understand why this message pump doesn't work under certain circumstances. I am using Python 2.5 with DirectPython 0.9 The following example causes the application to hang due to the message pump not processing anything. I could make a few assumptions about the problem but I'd rather just get a straight answer from somebody that knows.
class Application:

def __init__(self,appTitle,xRes,yRes):
d3d.createDevice(appTitle,u"",xRes,yRes,False,d3dc.CREATE.HARDWARE)

d3d.setState(d3dc.RS.FVF, d3dc.FVF.XYZRHW |  d3dc.FVF.DIFFUSE | d3dc.FVF.TEX1)
d3d.setState(d3dc.TS.COLOROP,      d3dc.TS.OP.MODULATE)
d3d.setState(d3dc.TS.COLORARG1,    d3dc.TS.TA.TEXTURE)
d3d.setState(d3dc.TS.COLORARG2,    d3dc.TS.TA.DIFFUSE)
d3d.setState(d3dc.TS.ALPHAOP,      d3dc.TS.OP.DISABLE)

def Pump(self):
for message in d3d.getMessages():
if message[0] == d3dc.WM.QUIT:
return 1
return 0

def main():
App = Application(u"Test",640,480)

while True:
if App.Pump():     break
else:
Render(0xff330011)


Now, if I take the "Pump()" method out of that class and call it from there, everything works just fine and dandy. Even more, if I place all of the code from "__init__" in a separate method called, say, "Init()" everything works fine. What is going on here? EDIT: Ok, what the hell? As a test I threw in some print statements at the beginning and end of __init__() and at the beginning of Pump(). Now, everything works. Ahhrg! Maybe I just misspelled something, or a tab was mutilated. I just can't seem to get the hang of this language =P

##### Share on other sites
Yeah one of the downsides with this language is finding a decent IDE that can alert you to those silly code blocks not aligned problems in Python since it's really picky since it doesn't use braces like c/c++,etc to tell code blocks apart.

##### Share on other sites
You wouldn't happen to have any suggestions for IDE's. I tried ActivePython. It wasn't too bad but it has a nasty habit of closing down when my app exits. I also tried Open Komodo, but the current build as of a few days ago was a bit on the broken side.

##### Share on other sites
Wing101, the free one from Wingware, is pretty decent. Basically I use it as a glorified text editor, though since it doesn't handle sys.exit() calls very well when you try to execute a program from inside it.

Notepad++ is a pretty decent free text editor, too.

##### Share on other sites
PyScripter (http://www.mmm-experts.com/). Beautiful Python IDE written in delphi (so it's fast, not like many others that I tried) and has lots of features. Updated fairly frequently as well.

(lol no, I am not a Bot, nor am I a member of the dev team)

##### Share on other sites
Whatever editor religion you happen to subscribe to, I have an universal tip for everyone: Make your editor insert spaces when tab is pressed.
That way, visible whitespace is just that, spaces.

##### Share on other sites
Python distributions almost all include tabnanny.py.

##### Share on other sites
Have you tried External Run (Alt+F9) with PyScripter? That should avoid the problem.

##### Share on other sites
Quote:
 Original post by ZaoWhatever editor religion you happen to subscribe to, I have an universal tip for everyone: Make your editor insert spaces when tab is pressed.That way, visible whitespace is just that, spaces.

Whatever editor religion you happen to subscribe to, I have a universal tip for everyone: Make your editor use tabs for indentation.
That way, indentation is just that: indentation (and it automatically looks like what each reader of the code wants it to look like).

(Personally, I use gVim, and I never have problems with inconsistencies in indentation. Although I do get them when I try to use IDLE - which comes with Python! - because of its space-conversion behaviour. AFAICT IDLE is simply broken in this regard - it doesn't offer all the configurations for tabs that it should, and the ones that are offered simply don't work as advertised.

Although I still suffer the annoyance with gVim that extra spacing on a line is also done with tabs, when I would like it to be done with spaces beyond the current indentation level - but I assume there is a way to fix this in the configuration files...)