On Monday, February 26, 2018 at 8:44:14 AM UTC-6, 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... > > def eggs(self, bashful=None, # etc... > ): > if bashful is None: > bashful = self.bashful > # and so on
Steven... even if this example code is absolutely atrocious (because it is!), and even *IF* i have a uneasy suspicion that this "inquiry" masks some dastardly malicious plan (because i do!), I must admit, I am happy to see that you are _finally_ embracing the OOP paradigm. For starters, I would suggest replacing those ugly if- clauses with some short-circuit or'd-logic. But obviously you need to run that "paragraph of arguments" through a single helper function, as the point of "DRY" is "Don't Repeat Yourself". </pesos count="2"> -- https://mail.python.org/mailman/listinfo/python-list