[Python] super(MyClass, self).__init__(*args, **kwargs)

Giuseppe Costanzi giuseppecostanzi a gmail.com
Mer 17 Feb 2016 19:59:34 CET


salve a tutti,
non riesco a capire come usare *args, **kwargs in una classe.
mi sono fatto uno script che riporto sotto ma, ad esempio mi perdo
kwargs per strada mentre gli args proprio non li vedo da dentro la classe.
lo script sotto mi ritorna

bc a hal9000:~/stimuli$ python super.py
MRO: ['B', 'A', 'object']
__init__ class B: ({1: 'A', 2: 'B', 3: 'C'},) {}
__init__ class A: ({1: 'A', 2: 'B', 3: 'C'},) {}
super class B: ({1: 'A', 2: 'B', 3: 'C'},) {}
class: B
kwargs : {}
end

che non ho capito?

import sys

class A(object):
     def __init__(self,*args, **kwargs):
         print "__init__ class A: %s %s"%(args,kwargs)

class B(A):
    def __init__(self,arg, *args, **kwargs):
        print "__init__ class B: %s %s" %(args, kwargs)
        super(B, self).__init__(*args, **kwargs)
        print "super class B: %s %s" %(args, kwargs)

        self.kwargs = kwargs


    def __str__(self):
        return "class: %s\nkwargs : %s" % (self.__class__.__name__,
                                          self.kwargs,)

def main():

    print "MRO:", [x.__name__ for x in B.__mro__]


    args = ('Y','Y','Z')
    kwargs = {1:"A", 2:"B", 3:"C"}

    foo = B(args, kwargs)

    print foo

    raw_input('end')

if __name__ == "__main__":
    main()


Maggiori informazioni sulla lista Python