On 2018-02-26 21:12, Rick Johnson wrote:
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".

Before using or'd-logic, you need to know whether the value could be falsey, e.g. 0.

</pesos count="2">

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to