Is there are good DRY fix for this painful design pattern?
Antoon Pardon
antoon.pardon at vub.be
Mon Feb 26 10:00:28 EST 2018
On 26-02-18 15:41, Steven D'Aprano wrote:
> I have a class with a large number of parameters (about ten) assigned in
> `__init__`. The class then has a number of methods which accept
> *optional* arguments with the same names as the constructor/initialiser
> parameters. If those arguments are None, the defaults are taken from the
> instance attributes.
>
> An example might be something like this:
>
>
> class Foo:
> def __init__(self, bashful, doc, dopey, grumpy,
> happy, sleepy, sneezy):
> self.bashful = bashful # etc
>
> def spam(self, bashful=None, doc=None, dopey=None,
> grumpy=None, happy=None, sleepy=None,
> sneezy=None):
> if bashful is None:
> bashful = self.bashful
> if doc is None:
> doc = self.doc
> if dopey is None:
> dopey = self.dopey
> if grumpy is None:
> grumpy = self.grumpy
> if happy is None:
> happy = self.happy
> if sleepy is None:
> sleepy = self.sleepy
> if sneezy is None:
> sneezy = self.sneezy
> # now do the real work...
Just throwing out an idea, but would it be possible to do what you want with
a decorator? You let the wrapper do this kind of control and then pass
control to the actual function with all values filled in?
I'll try to work something out later.
--
Antoon.
More information about the Python-list
mailing list