Mi chiedevo quale fosse la procedura migliore per inizializzare gli attributi dell'oggetto in Python, nel corpo della classe o all'interno della funzione __init__
?Inizializzazione/dichiarazione degli attributi in classe Python: dove posizionarli?
cioè
class A(object):
foo = None
vs
class A(object):
def __init__(self):
self.foo = None
ha senso, ho pensato che fossero limitati all'istanza in entrambi i casi ... grazie :) – fortran
Python ha un insieme complicato di [regole di ricerca attributi] (http://www.cafepy.com/article/python_attributes_and_methods/ python_attributes_and_methods.html). Senza entrare nei descrittori, per questo caso è sufficiente sapere che 'a .__ dict__' viene cercato per prima cosa nella chiave' foo', e se non viene trovato lì, viene cercato 'A .__ dict__'. Questo è il motivo per cui puoi usare 'a.foo' anche se' foo' è un attributo di classe. – unutbu
Degno di nota è che per gli attributi di classe, se si dovesse fare 'a.foo = whatever', si finirebbe per creare un nuovo attributo di istanza (che nasconde l'attributo di classe). 'A.foo' non sarebbe cambiato. È un po 'complicato, dal momento che è possibile accedere al valore di 'A.foo' con' a.foo', ma assegnandogli si creerebbe un nuovo attributo di istanza. – Kat