[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