I will answer questions 1 and 2.
1) This depends. If your classes are small then it is OK to put them in the same file. If they get big they are usually kept in separate files.
2) No, there does not need to be a main method. However, for a script, this is a mighty common idiom:
def main():
# Your code
# At the bottom of the file
if __name__ == '__main__':
main()
This way, your main will only get run when the file is run as a script, but it won't be run when imported as a module. Python will just execute any code it encounters not in a function when you import the module, so this protects you if you want to reuse a script as a module later.
This is just an idiom, main has no special meaning in python so you don't have to call it or anything.
import theClassesthanimport class1,class2,class3.if __name__ == "__main__": go()(or whatever their main function is called ) at the end of their python file and that will cause it to rungo()as soon as its double clicked or loaded from command prompt