2010-08-17 21 views
12

Così sto utilizzando i membri della classe statici in modo da poter condividere i dati tra i metodi di classe e metodi statici della stessa classe (ci sarà solo 1 istanza della classe). Capisco bene, ma mi chiedo solo quando i membri statici vengono inizializzati? È in importazione? Al primo utilizzo della classe? Perché io vado a chiamare i membri statici di questa classe da più di 1 modulo (quindi più di 1 istruzione import). Tutti i moduli che accedono ai metodi statici condividono gli stessi membri di dati statici? E se il mio principale cliente elimina l'istanza della mia classe, e poi ricrea (senza terminare tutto o ingegnose Re-importazione), i miei membri dati saranno conservati?i membri della classe statici Python

risposta

13

Essi verranno inizializzate in fase di definizione della classe, che avverrà al momento dell'importazione se si sta importando la classe come parte di un modulo. Questo assumendo uno stile di definizione di membro della classe "statico" in questo modo:

class Foo: 
    bar = 1 

print Foo.bar # prints '1' 

Si noti che, essendo questo un membro della classe statica, non v'è alcuna necessità di creare un'istanza della classe.

L'istruzione import eseguirà il contenuto di un modulo esattamente una volta, non importa quante volte o dove viene eseguito.

Sì, i membri statici sarà condivisa da alcun codice accedervi.

Sì, i membri statici di una classe verranno mantenute se si elimina un oggetto il cui tipo è quella classe:

# Create static member 
class Foo: 
    bar = 1 

# Create and destroy object of type Foo 
foo = Foo() 
del foo 

# Check that static members survive 
print Foo.bar # Still prints '1' 
+1

Sì mi rendo conto che non c'è bisogno di creare un'istanza della classe. Ma l'istanza della classe ha bisogno di accedere a questi membri così come ad altri moduli. La mia preoccupazione è che sto importando questo modulo da diversi altri moduli. Ciò significa che i membri statici vengono ripristinati per tutti i moduli? O ogni modulo che lo importa avrà il proprio set di membri statici? – Falmarri

+0

La tua modifica ha risposto alla mia domanda, grazie =] – Falmarri

Problemi correlati