Topic: passare un oggetto ad una funzione  (Letto 131 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline paparucino

  • python unicellularis
  • *
  • Post: 4
  • Punti reputazione: 0
    • Mostra profilo
passare un oggetto ad una funzione
« il: Dicembre 14, 2020, 14:06 »
Ciao a tutti, è la prima volta che scrivo per cui siate pazienti  :angel:

def inside_tabbar_clicked(self, index):
        ...
        if index == 1:
            self.Open_BlaBla_tab(car='Audi')
        if index == 2:
            self.Open_FooFoo_tab(car='BMW')   
        ... #altri indici utilizzano codice simile a quello sotto
            #

    def Open_BlaBla_tab(self, car, refresh=True):
        ...
        ##il codice seguente è presente in ogni [b]def Open_[/b]
       
        ## Per evitare codice ridondante vorrei chiamare un nuovo metodo
        ## che gestirà l'oggetto puntato dal parametro **XXX**
       
        if self.MainTabs_tabWidget.currentIndex() != 1 or refresh:
           self.MainTabs_tabWidget.setCurrentIndex(1)
           self.fill_**XXX**_Table(self.**XXX**_table,
           '''SELECT client, model FROM %s WHERE year = '2020' AND month = '10 ''' % (car))

    def fill_**XXX**_Table(self, table: QTableWidget, query):
        data = self.db_Get_Data(query)
        table.setRowCount(0)
        ed_hour = float(0.0)
        if data:
           ...
        self.**XXX**_TotalHours_label.setText(str(ed_hour))



Quello che mi servirebbe è qualcosa del genere
      ->Index punta ad un metodo  Open_xxx
     ->In Open_xxx ci dovrebbe essere una chiamata ad un nuovo metodo che ricevendo **XXX** e %s come parametri chiami il corrispondente metodo fill_**XXX**
 
Ho fatto diversi tentativi ma ogni volta che fill_**XXX** viene chiamato ottengo un errore del tipo: **XXX** è una stringa e non un oggetto

In poche parole vorrei ridurre drasticamente il codice visto che ogni index chiama 3 e che differiscono tra loro sostanzialmente per il valore di **XXX**

Grazie in anticipo
papa

Offline nuzzopippo

  • python neanderthalensis
  • ****
  • Post: 334
  • Punti reputazione: 0
    • Mostra profilo
Re:passare un oggetto ad una funzione
« Risposta #1 il: Dicembre 14, 2020, 20:00 »
Un "oggetto" può essere tranquillamente parametro di una funzione.
Puoi, quindi, passare ad una funzione il Tuo "oggetto" ed all'interno di essa utilizzarne i metodi, od anche, volendo, definire anche caratteristiche "nuove" dell'oggetto stesso, ti faccio un esempio :
>>> class Subject:
def __init__(self): pass
def set_first_name(self, value):
self.first_name = value
def __str__(self):
return self.last_name + self.first_name


>>> def set_first_name(obj, name):
obj.set_first_name(name)


>>> def set_last_name(obj):
obj.last_name = 'nuzzo'


>>> oggetto = Subject()
>>> set_first_name(oggetto, 'pippo')
>>> set_last_name(oggetto)
>>> print(oggetto)
nuzzopippo
>>>


Come vedi nello stralcio di codice sopra, ho definito al volo un oggetto "Subject", una funzione cui passo una istanza dell'oggetto che provvede a richiamarne un metodo per la definizione del first_name ed un'altra funzione cui passo per parametro lo stesso oggetto che definisce una proprietà "nuova" dell'oggetto ed alla fine lo stampo, ed esce il mio nick.
NON copiare 'sti metodi così come sono, Ti darebbero errori probabilmente, sono solo un esempio di mezzi che stanno li a Tua disposizione, approfondisci le nozioni sui parametri delle funzioni e sulle classi e li vedrai.

Ciao :)

Offline paparucino

  • python unicellularis
  • *
  • Post: 4
  • Punti reputazione: 0
    • Mostra profilo
Re:passare un oggetto ad una funzione
« Risposta #2 il: Dicembre 14, 2020, 20:47 »
Ciao,
mi sembra un'ottima soluzione. Provo ad adattarla alle mie necessità e ti/vi farò sapere

Grazie per la risposta

papa

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 3.146
  • Punti reputazione: 9
    • Mostra profilo
Re:passare un oggetto ad una funzione
« Risposta #3 il: Gennaio 12, 2021, 15:16 »
> Un "oggetto" può essere tranquillamente parametro di una funzione.

No.
Un oggetto DEVE essere l'argomento di una funzione. Non è possibile passare a una funzione qualcosa che NON sia un oggetto. Sarebbe errore di sintassi.
E quando la funzione, al suo interno, "usa" un oggetto, in qualunque modo e con qualsiasi sintassi, quello che in realtà sta facendo è accedere alle proprietà e ai metodi di quell'oggetto.

In Python tutto è un oggetto.

Offline nuzzopippo

  • python neanderthalensis
  • ****
  • Post: 334
  • Punti reputazione: 0
    • Mostra profilo
Re:passare un oggetto ad una funzione
« Risposta #4 il: Gennaio 12, 2021, 17:09 »
...
No.
Un oggetto DEVE essere l'argomento di una funzione. Non è possibile passare a una funzione qualcosa che NON sia un oggetto. Sarebbe errore di sintassi. ...
In Python tutto è un oggetto.

Verissimo @Ric :)
Ho volutamente evitato di precisarlo allo OP, avrei dovuto digli che anche la stringa è un "oggetto", rischiando così di confondergli le idee (ricordo bene come fischiarono a me le orecchie anche di recente ;) ), a volte son meglio "piccoli passi" penso.
Per tale pensiero, ho solo cercato di far comprendere allo OP che non deve utilizzare una stringa indicante il nome di un oggetto ma l'oggetto stesso, pian piano verrà il resto (se approfondirà, certo).