On 3/19/2018 1:04 PM, Irv Kalb wrote:
However, there is one warning that I am seeing often, an > I'm not sure about 
how to handle it.  The warning I see is:

"Instance attribute <instance variable name> defined outside of __init__ ..."

Style checkers are notorious for sometimes giving bad advice and being overly opinionated.

I think a claim that in all programs all attributes should be set *in* __init__, as opposed to *during* initialization, is wrong. All attribute setting is side-effect from a functional view (and usually 'bad' to a functionalist). There is no reason to not delegate some of it to sub-init functions when it makes sense to do do. There is good reason to do so when it makes the code easier to understand *and test*.

Example: the IDLE's options setting dialog. Until last summer, it was one class* with at perhaps a thousand lines of initialization code (with no automated test). To me, the dictate that they should have all been in the __init__ function is absurd. Fortunately, there were about 9 subsidiary functions.

* We split off a class for each tab, but keep the separate functions to create the tab page widgets and load them with current values.

The following is a simple example.  I am creating a card class that I am using 
to build card games with PyGame.
class Card():

     BACK_OF_CARD_IMAGE = pygame.image.load('images/backOfCard.png')

     def __init__(self, window, name, suit, value):
         self.window = window
         self.suit = suit
         self.cardName = name + ' of ' + suit
         self.value = value
         fileName = 'images/' + self.cardName + '.png'
         self.image = pygame.image.load(fileName)
         self.backOfCardImage = Card.BACK_OF_CARD_IMAGE

         self.conceal()

     def conceal(self):
         self.faceUp = False

     def reveal(self):
         self.faceUp = True

If the single line is all these functions do, I *might* suggest getting rid of them. But this is really a separate issue.

--
Terry Jan Reedy

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

Reply via email to