On 06May2022 14:11, Loris Bennett <loris.benn...@fu-berlin.de> wrote: >r...@zedat.fu-berlin.de (Stefan Ram) writes: >> If you need a class, you can write a class. >> >> When one imports a module, the module actually gets executed. >> That's why people write "if __name__ == '__main__':" often. >> So, everything one wants to be done at import time can be >> written directly into the body of one's module. > >So if I have a module which relies on having internal data being set >from outside, then, even though the program only ever has one instance >of the module, different runs, say test and production, would require >different internal data and thus different instances. Therefore a class >seems more appropriate and it is more obvious to me how to initialise >the objects (e.g. by having the some main function which can read >command-line arguments and then just pass the arguments to the >constructor. > >I suppose that the decisive aspect is that my module needs >initialisation and thus should to be a class. Your examples in the >other posting of the modules 'math' and 'string' are different, because >they just contain functions and no data.
Yeah, I do this quite a bit. So I might have the core class which does it all: class Thing: def __init__(self, whatever...): .... and if I'm exercising this from the command line I'll write a main function: def main(argv): cmd = argv.pop(0) ... use the arguments to specify data files or modes or whatever ... obj = Thing(...init the thing...) obj.do_something(...) That is usually the top thing, after the imports but before everything else. Then right down the bottom: if __name__ == '__main__': sys.exit(main(sys.argv)) for running the module in command line mode: python3 -m the.module.name args here ... That way you can import it elsewhere for the "thing" class and also do basic command line stuff with it directly. Cheers, Cameron Simpson <c...@cskk.id.au> way I'll probably write a class for a command line. -- https://mail.python.org/mailman/listinfo/python-list