Solution: Direct access to Printer I/O lines
Alex Martelli
aleaxit at yahoo.com
Fri Dec 15 07:16:13 EST 2000
More information about the Python-list mailing list
Fri Dec 15 07:16:13 EST 2000
- Previous message (by thread): Solution: Direct access to Printer I/O lines
- Next message (by thread): Solution: Direct access to Printer I/O lines
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
<jkndeja at my-deja.com> wrote in message news:91cnp3$g59$1 at nnrp1.deja.com... [snip] > I have the following thoughts about the interface, and would be > interested in any comments: Sure! > - The module implements a class, say directlpt > - The module only allows three 'Singleton' instances of the class, > corresponding to LPT1--3. This is set up in the constructor: > > import directlpt > > l1 = directlpt.directlpt(1) # gives access to LPT1: > > anotherl1 = directlpt.directlpt(1) # will raise an exception - only one > instance allowed This gives me a good chance for one of my favourite rants, '"Singleton" design-pattern considered harmful'!-) But 'Singleton' is not being ideally applied, so I'll skip that. Why given an error when the object mapping the same LPTx: is asked-for twice? Just return what is, functionally, "the same" object -- whether the id() is the same or not is quite a secondary issue, so, if you want to keep directlpt as a class, that's OK too -- the id() will differ [you can't change what's returned by "calling the class", so a new object will come up each time], but that's OK as long as 'different' object for the same printer-port share all state among them. Or else, make directlpt.directlpt into a factory function, returning an object of class (or type) '_directlpt', say, in which case you may be able to also get the same identities. Either of these will work better than constraining different client-code modules to coordinate their generation and release of directlpt objects. I think the pattern based on different-identities/same-state has advantages; for example, it makes it possible (though it may still be tricky) for client-code to _inherit_ from directlpt: class PrettyLpt(directlpt): def __init__(self, n, doodad): directlpt.__init__(self, n) self.doodad = doodad # etc, etc If you do want to allow that, more or less unrestrainedly, you'll have to take some care to avoid name clashes (but starting directlpt's attribute names with '__' will do:-). Alex
- Previous message (by thread): Solution: Direct access to Printer I/O lines
- Next message (by thread): Solution: Direct access to Printer I/O lines
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list