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.