Linuxtrent: Re: Qualche domanda su Python...

  • From: Lele Gaifax <lele@xxxxxxxxxx>
  • To: linuxtrent@xxxxxxxxxxxxx
  • Date: Mon, 21 May 2001 13:06:53 +0200

>>>>> On Mon, 21 May 2001 12:18:45 +0200, Matteo Ianeselli <ianezz@xxxxxxxxxx> 
>>>>> said:

    MI> Sto smaneggiando con Python (2.1, tra l'altro) + Tkinter,
    MI> giusto per rendermi conto dell'ambiente, ma mi sono imbattuto
    MI> in alcune cosette che non mi sono del tutto chiare:

Ti posso rispondere solo per la prima parte, in quanto non ho mai
usato Tk...

    MI> 1) Sbaglio, o non e` possibile avere l'equivalente di un
    MI> metodo "static" (parlando di C++) in una classe? (metodo non
    MI> legato a una particolare istanza)

    MI>    Del tipo (e` sbagliato):

    MI>       class Pincopallo: _values={ "Lun": "Lunedi`", "Mar":
    MI> "Martedi`", "Mer": "Mercoledi`" }
      
    MI>           def getValue(value): return
    MI> Pincopallo._values[value]


    MI>       print Pincopallo.getValue("Lun")


    MI>    capisco che si tratta di un C++-ismo (o anche di un
    MI> Java-ismo), pero` a una prima occhiata non ci starebbe poi
    MI> tanto male...

Python non dispone ufficialmente di metodi di classe, anche se ci sono
svariati artefizi che ne consentono l'uso. Se ne parla moltissimo su
c.l.p., e non sono proprio sicuro che nella 2.1 non ci sia già uno di
questi metodi.

Quello che tu hai provato però funziona, anche se non come vuoi tu :)

class Pincopallo:
    _values = {'Lun': 'Lunedi', 'Mar': 'Martedi'}

    def getValues (self, value):
        return self._values[value]
    # end def
# end class

class Foobar(Pincopallo):
    _values = {'Lun': 'Monday', 'Mar': 'Tuesday'}
# end class

if __name__ == '__main__':
    p = Pincopallo()
    print p.getValues('Lun')

    f = Foobar()
    print f.getValues('Lun')
# end if

$ python p.py
Lunedi
Monday

Quindi le classi *hanno* delle variabili "di classe"... Questo è uno
degli artefizi per simulare i "metodi" di classe...

Un errore comune, nella scrittura di un "metodo", è non dichiararne il
primo argomento, "self": mentre in C++ è implicito, qui lo devi
mettere per esplicito.

ciao, lele.
-- 
nickname: Lele Gaifax   | Quando vivro' di quello che ho pensato ieri
real: Emanuele Gaifas   | comincero' ad aver paura di chi mi copia.
email: lele@xxxxxxxxxx  |               -- Fortunato Depero, 1929.

-- 
Per iscriversi  (o disiscriversi), basta spedire un  messaggio con SOGGETTO
"subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxxxxxx


Other related posts: