Instance attributes vs method arguments

John O'Hagan mail at johnohagan.com
Tue Nov 25 05:48:01 EST 2008


On Tue, 25 Nov 2008, Marc 'BlackJack' Rintsch wrote:
> On Tue, 25 Nov 2008 07:27:41 +0000, John O'Hagan wrote:
> > Is it better to do this:
> >
> > class Class_a():
> > 	def __init__(self, args):
> > 		self.a = args.a
> > 		self.b = args.b
> > 		self.c = args.c
> > 		self.d = args.d
> > 	def method_ab(self):
> > 		return self.a + self.b
> > 	def method_cd(self):
> > 		return self.c + self.d
> >
> > or this:
> >
> > class Class_b():
> > 	def method_ab(self, args):
> > 		a = args.a
> > 		b = args.b
> > 		return a + b
> > 	def method_cd(self, args)
> > 		c = args.c
> > 		d = args.d
> > 		return c + d
> >
> > ?
> >
> > Assuming we don't need access to the args from outside the class, is
> > there anything to be gained (or lost) by not initialising attributes
> > that won't be used unless particular methods are called?
>
> The question is if `args.a`, `args.b`, …, are semantically part of the
> state of the objects or not.  Hard to tell in general.

Would you mind elaborating a little on that first sentence?
>
> I know it's a made up example but in the second class I'd ask myself if
> those methods are really methods, because they don't use `self` so they
> could be as well be functions or at least `staticmethod`\s.

I guess I went overboard keeping the example simple :) : the real case has 
many methods, and they all use "self" (except one, actually, so I'm looking 
up "static methods" now; thanks). 


Regards,

John





More information about the Python-list mailing list