<html>
  <head>
    <meta content="text/html; charset=windows-1252"
      http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">Il 17/02/2016 19.59, Giuseppe Costanzi
      ha scritto:<br>
    </div>
    <blockquote
cite="mid:CAAVPJoWH0FKWA1+fpPqee7Tw7VyVmTVV0Agzg5UPb3P7=kJVRw@mail.gmail.com"
      type="cite">
      <pre wrap="">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@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()
_______________________________________________
Python mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Python@lists.python.it">Python@lists.python.it</a>
<a class="moz-txt-link-freetext" href="http://lists.python.it/mailman/listinfo/python">http://lists.python.it/mailman/listinfo/python</a>
</pre>
    </blockquote>
    Ciao, ci sono i seguenti errori:<br>
        Tua - kwargs = {1:"A", 2:"B", 3:"C"}<br>
        Corretta - kwargs = {'1':"A", '2':"B", '3':"C"} # le chiavi del
    dizionario DEVONO essere stringhe<br>
    <br>
        Per le altre due ci sono due opzioni<br>
            Questa ha pių senso:<br>
                Tua - def __init__(self,arg, *args, **kwargs): #quel arg
    sembra un errore di battitura, non ha molto senso in quella
    posizione<br>
                Corretta -def __init__(self, *args, **kwargs):<br>
    <br>
                Tua - foo = B(args, kwargs)<br>
                Tua - foo = B(args, **kwargs)
    # se glielo passi senza i doppi asterischi gli stai passando un
    oggetto dict che va a finire come lista di argomenti catturata da
    *args, devi spacchettarlo con **<br>
    <br>
            Questa ha meno senso:<br>
                Tua - def __init__(self,arg, *args, **kwargs):
    #supponendo ci siano motivi particolari per cui vuoi tenere il tutto
    com'č<br>
    <br>
                Tua - foo = B(args, kwargs)<br>
                Corretta - foo = B(*args, **kwargs) # devi spacchettare
    args altrimenti viene catturata da arg come oggetto tupla.
    spacchettandola accade che la prima 'Y' va ad arg e le restanti due
    lettere ad *args<br>
    <div class="moz-signature">-- <br>
      <title></title>
      <style type="text/css"> 
            .sendername {font-family: "arial", arial;
                         font-size: 16px;
                         font-style: italic;
                         font-weight: bold;
                         color: #333333;
                         }
            .senderdetails {font-family: "arial", arial;
                            font-size: 12px;
                            color: #666666;
                            padding-left: 3px;
                            }
            .boldtext {font-weight: bold;}
            a:link {color: #666666;
                    text-decoration: none;}
            a:visited {color: #666666;
                       text-decoration: none;}
        </style> <br>
      <div class="sendername"> Dario Santomarco </div>
      <br>
      <br>
    </div>
  </body>
</html>