[Python] invocare super.setup automaticamente

Valerio Maggio valerio.maggio a gmail.com
Ven 8 Nov 2013 08:50:13 CET


On 08 Nov 2013, at 07:52, Marco Beri <marcoberi a gmail.com> wrote:

> 2013/11/8 Piergiuliano Bossi <pgbossi a gmail.com>
> Mi sembra di capire che in Python sia con unittest che con nose non ci sia un modo builtin per far si' che, in una gerarchia di test, la setup della superclasse venga invocata automaticamente eseguendo un test della sottoclasse. Quello che vedo e' che di solito il primo step della setup della sottoclasse e' invocare la setup della superclasse (yak!).
> 
> Prima domanda: confermate?
> 
> Sì, questo è il comportamento standard di Python.
>  
> Seconda domanda: vi rassegnate o c'e' qualche escamotage?
> 
> Ti fa schifo così?
> 
> class Father(object):
>     def setUp(self):
>         print "Padre"
>         self.childrenSetUp()
> 
> class Children(Father):
>     def childrenSetUp(self):
>         print "Figlio"
> 
> x = Children()
> x.setUp()

A me, sinceramente, un pochino si :D
Scherzi a parte, credo che in questo caso imho hai "spostato" il problema, "specializzando" il setUp della superclasse.
Invece, se non ho capito male, Piergiuliano chiedeva se ci fosse qualche altro escamotage per invocare il setUp di una superclasse (Father) durante l'esecuzione del test della classe Child.

La mia domanda è: durante l'esecuzione del test o durante l'esecuzione del setUp della classe Child?

Nel primo caso, se la classe Child non ridefinisce un setUp, naturalmente, viene invocato quella della classe Father.
Se, invece, lo ridefinisce, non mi vengono in mente soluzioni *senza* l'invocazione esplicita di super(Child, self).setUp().
Btw, non la vedo una grande limitazione.

> 
> Altrimenti puoi giocare con le metaclassi, ma per questo ti risponderà qualcuno più bravo di me :-)
> 

Mmm imho no… nel senso che con la metaclasse agisci a livello di classe e non di istanza e il setUp deve essere invocato per *ogni* test dell'istanza correntemente in esecuzione.
Probabilmente mi sbaglio, non c'ho riflettuto a lungo, ma ad intuito questo è quello che mi viene in mente.

m2c :-)
--
valerio


-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20131108/8dd71c35/attachment.html>


Maggiori informazioni sulla lista Python