[Tutor] Tips

Sydney Shall s.shall at virginmedia.com
Thu Jun 19 13:09:31 CEST 2014


On 19/06/2014 03:37, Steven D'Aprano wrote:
> 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.
>
>
Thanks a lot. This was very useful and clear.

-- 
Sydney Shall


More information about the Tutor mailing list