On Wed, Jun 18, 2014 at 12:35:20PM +0200, Sydney Shall wrote: > On 17/06/2014 22:35, Alan Gauld wrote: > >Use modules instead of singleton classes > As a new beginner with Python, I am having problem understanding the > difference here. > I think I understand classes, but still have problems with inheritance, > but I do not understand what defines a module.
I assume you know how to make a class: class Spam: def method(self, arg): ... And then you make instances: x = Spam() y = Spam() A singleton class is one which only allows there to be a single instance (or occasionally, two instances, a "doubleton" class). For example, None is a singleton. Like all instances, None has a class, but see what happens if you try to create a second instance in Python 2.7 (Python 3.3 is slightly different): py> from types import NoneType py> x = NoneType() # create a new instance Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: cannot create 'NoneType' instances The error is slightly inaccurate, it's not that no instances can be created at all, but that only *one* instance can be created, and it's already created and named None. Inheritence is a separate issue, big enough that it deserves a new thread. As for modules, you already use modules, I'm sure, you just don't realise it. Every time you create a python file ending in .py, that's a module. Scripts are modules. Every time you use the import command, you're loading a module: py> import math py> print math <module 'math' from '/usr/local/lib/python2.7/lib-dynload/math.so'> Python tries very hard to ensure that every module is loaded only once. (There are circumstances where you can fool it, but they're rare.) Since the module holds state (variables) and behaviour (functions), modules perform the same sort of role as classes, so a module which is loaded once is very similar to a singleton instance. In other words, if you want a class to implement singleton behaviour, you have to work at it. But if you shift the functionality from the class into a module, Python gives you singleton behaviour for free. But if you're not sure why anyone would want a singleton instance, I agree with you: most (but not all) uses of singletons are unnecessary. -- Steven _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor