Raymond Hettinger added the comment:

Jason, I made some recommendations on this subject in my blog post a few years 
ago:  http://rhettinger.wordpress.com/2011/05/26/super-considered-super/

'''
A more flexible approach is to have every method in the ancestor tree 
cooperatively designed to accept keyword arguments and a keyword-arguments 
dictionary, to remove any arguments that it needs, and to forward the remaining 
arguments using **kwds, eventually leaving the dictionary empty for the final 
call in the chain.

Each level strips-off the keyword arguments that it needs so that the final 
empty dict can be sent to a method that expects no arguments at all (for 
example, object.__init__ expects zero arguments):

class Shape:
    def __init__(self, shapename, **kwds):
        self.shapename = shapename
        super().__init__(**kwds)        

class ColoredShape(Shape):
    def __init__(self, color, **kwds):
        self.color = color
        super().__init__(**kwds)

cs = ColoredShape(color='red', shapename='circle')

'''

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue1683368>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to