Mentre codifica una nuova classe con la spyder IDE, e l'utilizzo di pylint per verificare il risultato finale, ho incontrato i messaggi di errore (ma il il codice funziona come previsto senza errori).Pythonic: uso del __dict__ nella funzione di self .__ init__ di una classe
Contesto: nella funzione di costruzione, voglio creare nuovi membri (parecchio). Di solito, questi sono abbastanza poche per cui uso questa codifica:
class MyClass():
def __init__(self):
self.a = ...
self.b = ...
Ma in un caso di molti membri (diciamo 10), con tutto pronto per lo stesso valore iniziale (diciamo che sono tutti dict()) , ero tentato di farlo:
class MyClass():
def __init__(self):
_vars = ["a", "b", "c", ...]
for _var in _vars:
self.__dict__[_var] = dict()
Inoltre nella classe, mi riferivo a un membro utilizzando:
class MyClass():
def my_method(self):
print self.c
errore con pylint (in spyder):
Quando si utilizza pylint su questo file, ho ricevuto un messaggio di errore che dice:
MyClass.my_method: istanza di 'MyClass' non ha 'c'member .
Tuttavia, il codice viene eseguito correttamente, senza errori, vale a dire. Posso accedere al membro "c" senza problemi.
Domanda: si tratta di una codifica corretta, o dovrei evitare un metodo simile per inizializzare i membri?
non sono sicuro esattamente quello che stai cercando di fare con 'MyClass', ma suona come si potrebbe investire in un' collections.defaultdict () '. Vedi http://docs.python.org/library/collections.html#collections.defaultdict.Ancora interessato a ciò che gli altri hanno da dire sulla modifica di sé .__ dict__, piuttosto che creare una variabile di istanza che sembra essere un dizionario. – Noah
@Noah Grazie Noah, non conoscevo la classe defaultdict. Sembra davvero interessante! Ora sto vedendo che ho sicuramente codificato alcuni "strumenti" per il mio codice, che sono stati probabilmente creati in alcuni migliori moduli python codificati (ad esempio, ho creato una cosa semplice che sembra fare un po 'il defaultdict, anche se molto meno complesso). Molte grazie. – mhavel