Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Notice Board

Come si assegna il valore che ritorna un metodo ad un attributo di una classe?

P
Powner (5600 points)
36 68 85
in Programmare in Python by (5.6k points)
closed by

Prima di tutto chiedo la conferma sul significato di attributo di una classe, perché io ho capito essere quello che si inserisce all'interno del metodo costruttore del tipo:

def __init__(self): self.attributo=valore

Quello che mi serve, comunque, è un nome dato a un valore che posso richiamare all'interno della classe oppure in una funzione esterna, utilizzando oggetto.attributo

Intendendo questo, come si creano? Ovvero: a lezione e su internet ho visto più volte degli attributi che prendono come valore quelli dati in input al costruttore, ma come fare se voglio dichiararne uno che ha per valore ciò che ritorna un metodo della classe stessa?


Ho provato a mettere self.nomeattributo = nomedelmetodo()

In un caso mi ha funzionato con alcune modifiche (che ho fatto a tentativi) alla sintassi e agli input del metodo in questione.

Successivamente, ho provato a fare la stessa cosa con un altro metodo, ma in questo caso continua a restituirmi il seguente errore, qualunque modifica provi a fare:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf2 in position 369: invalid continuation byte

(ho verificato che dipende esattamente da questa implementazione, perché l'errore nasce solo quando è presente la riga in questione)

Qualcuno può darmi qualche delucidazione?

1.7k views
closed with the note: answered

1 Answer

andrea.sterbini (207940 points)
755 1270 2377
by (208k points)
Puoi aggiungere o modificare un attributo di un oggetto (cioè di una istanza, non di una classe) usando in un qualsiasi metodo dell'oggetto la sintassi

self.attributo = self.metodo(...)

Se invece sei in altre funzioni puoi usare

oggetto.attributo = oggetto.metodo(...)
P
Powner (5600 points)
36 68 85
by (5.6k points)
È la sintassi che ho usato, ma nel secondo caso mi dà l'errore che ho scritto nel post, possibile che c'è qualche parametro da passare al metodo? (anche se nella definizione del metodo il parametro prende solo self)

Poi io continuo ad avere problemi con il lessico, cosa indica "istanza"?

Ultima cosa: lei ha scritto "usando in un qualsiasi metodo dell'oggetto" quella sintassi, ma gli attributi non dovrebbero essere dichiarati all'interno del costruttore? Qual è la discriminante per farlo all'interno o all'esterno?
andrea.sterbini (207940 points)
755 1270 2377
by (208k points)
edited by
In python gli attributi possono essere aggiunti all'oggetto anche in altri metodi o da altri programmi.
Non c'è un meccanismo di protezione forte.

'istanza' = oggetto creato a partire dalla classe (https://it.wikipedia.org/wiki/Oggetto_(informatica))

Per il messaggio di errore immagino che si tratti di un carattere spurio invisibile inserito dall'editor, prova a cancellare quel gruppo di linee e riscriverlo
P
Powner (5600 points)
36 68 85
by (5.6k points)
Grazie mille per le delucidazioni. Per quanto concerne l'errore, ho già provato a rivedere tutto il metodo(che poi su stackoverflow si parla di errori di encoding nei file, ma io non apro nessun file), cercherò una soluzione diversa. Grazie ancora!