When and why would I ever use > "__main__" or the many other "__whatever__" constructs?
You don't generally use those names directly, they are 'magic'. The __add__ example is a good one. When you do `"hello " + "world"` behind the scenes python is actually calling "hello ".__add__("world"). There are a couple of places though that you do use them. "__main__" is a good example. That is the name of the `main` module. The module attribute `__name__` is the name of that module. If the code is being executed as a script the value of `__name__` is set to "__main__". Hence, if you create a module and you want to execute some code only if that module is run as a script you can use this construct: if __name__ == "__main__": # do stuff Here is an example of a the `__name__` attribute when it isn't "__main__": >>> import sys >>> sys.__name__ 'sys' Also, these names are frequently used when creating a class where you want special behavior. >>> class myint(object): ... def __init__(self, a): # The constructor ... self.a = a ... ... def __add__(self, x): ... print "I'm adding" ... return self.a + x ... >>> x = myint(10) >>> x + 12 I'm adding 22 As an added note, `"hello " "world"` is not concatenating two strings, The parser just sees it as one string. Otherwise, this would also work: >>> x = "hello " >>> x "world" File "<stdin>", line 1 x "world" ^ SyntaxError: invalid syntax Where: >>> x = "hello " >>> x + "world" 'hello world' Matt -- http://mail.python.org/mailman/listinfo/python-list