[Tutor] Some question about OO practice
Kent Johnson
kent37 at tds.net
Sun Nov 4 14:31:00 CET 2007
John wrote:
> I've now written my first set of Classes to do some fairly specific
> processing for work I do. I have a few questions.
>
> First, in looking through what I've done, I basically just incorporated
> all my previous scripts into classes... they are still highly specific
> to my application, though I did try to make them somewhat 'reusable' or
> general. It is difficult though, as portions required hardcoding. For
> that I used the __init__ method to define a bunch of 'hardcoded'
> variables, that could then be set if they were passed on initiation.
You didn't show your original script or enough context for me to judge
if this was a useful change. A program that uses classes rather than
simple scripts is not necessarily 'better' than one that doesn't.
Classes are a tool that is helpful in some circumstances but not all. In
other words don't add classes to your programs just because it seems
like a good idea. Some good reasons for using classes are here:
http://personalpages.tds.net/~kent37/stories/00014.html
> I guess, I'm writing because I'm wondering now what people think about
> writing classes versus just using scripts for things that are so
> specific. It's hard for me to give an example, or show what I'm doing,
> but I would appreciate thoughts on that matter.
It's ok for classes to be specific.
> One thing I am struggling with is how to assign *args and **kwargs if
> they are passed, and how to ignore them if they are not... right now I
> do this:
>
> def myfunc(self, *args,**kwargs):
> a=self.a
> b=self.b
> kwa=self.kwa
> kwb=self.kwb
> try:
> a=args[0]; b=args[1]
> kwa=kwargs['a']
> kwb=kwargs['b']
> except: pass
>
>
> Where self.X is defined in the __init__ of the class. Is that correct?
No, this will not assign from kwargs if args is not given. How about this:
def myfunc(self, *args,**kwargs):
try:
a=args[0]; b=args[1]
except TypeError:
a=self.a
b=self.b
try:
kwa=kwargs['a']
kwb=kwargs['b']
except TypeError:
kwa=self.kwa
kwb=self.kwb
Kent
More information about the Tutor
mailing list