IMO, if you have methods that you want to use in different classes, this
is hint that
you are in need of generic functions. See this blog post for an example:
http://www.artima.com/weblogs/viewpost.jsp?thread=237764
That's a very interesting article, but I'm afraid I don't understand what
makes them "generic functions" as opposed to just functions. Your simple
generic example:
from pkgutil import simplegeneric
@simplegeneric
def print_out(self, text, *args):
if args:
text = text % args
print >> self.stdout, text
# and similar for print_err and readln_in
class FileOut(object):
def __init__(self):
self.stdout = file('out.txt', 'w')
print_out(FileOut(), 'writing on file') # prints a line on out.txt
doesn't seem to do anything extra that the following would do:
def print_out2(obj, text, *args):
if args:
text = text % args
print >> obj.stdout, text
class FileOut2(object):
def __init__(self):
self.stdout = file('out2.txt', 'w')
print_out(FileOut2(), 'writing on file')
What's the difference?