2012-11-09 25 views
8

I codici sono simili:come accedere alla variabile di classe per stringa in Python?

class Test: 
    a = 1 
    def __init__(self): 
     self.b=2 

Quando faccio un'istanza di Test, posso accedere alla sua istanza variabile b simili (utilizzando la stringa "b"):

test = Test() 
a_string = "b" 
print test.__dict__[a_string] 

Ma non funziona per a come self.__dict__ non contiene una chiave denominata a. Quindi, come posso accedere a a se ho solo una stringa a?

Grazie!

+0

Il motivo 'self .__ dict__' non contiene una chiave chiamata' a' è che è in 'self .__ class __.__ dict__'. Se vuoi davvero fare le cose manualmente, puoi leggere l'ordine di ricerca degli attributi e controllare tutto nello stesso ordine ... ma davvero non vuoi fare le cose manualmente. (Dovresti occuparti di slot, proprietà, classi classic vs. new-style, '__dict__'s personalizzati, descrittori personalizzati e tutti i tipi di altre cose che è divertente conoscere, ma non direttamente rilevanti per risolvere il tuo problema.) – abarnert

+1

PS, poiché questo è chiaramente Python 2.x, probabilmente si vuole 'class Test (oggetto)' qui, a meno che non si abbia una ragione specifica per evitare classi di nuovo stile. Anche per semplici piccoli programmi di test, vale la pena prendere l'abitudine. (E soprattutto per i programmi di test che si basano esplicitamente sui modi in cui i due tipi di classi differiscono ...) – abarnert

risposta

21
getattr(test, a_string) 

più alcuni caratteri in modo da poterlo postare.

9

uso getattr questo modo di fare ciò che si vuole:

test = Test() 
a_string = "b" 
print getattr(test, a_string) 
4

Prova questa:

class Test:  
    a = 1  
    def __init__(self): 
     self.b=2 

test = Test()  
a_string = "b" 
print test.__dict__[a_string] 
print test.__class__.__dict__["a"] 
1

È possibile utilizzare:

getattr(Test, a_string, default_value)

con un terzo argomento per tornare alcuni default_value nel caso a_string non è trovato nella classe Test.

Problemi correlati