2013-06-25 1 views
14

Sono un principiante in python. Non sono in grado di capire qual è il problema?AttributeError: l'oggetto 'tuple' non ha attributo

def list_benefits(): 

     s1 = "More organized code" 
     s2 = "More readable code" 
     s3 = "Easier code reuse" 
     s4 = "Allowing programmers to share and connect code together" 
     return s1,s2,s3,s4 

def build_sentence(): 

     obj=list_benefits() 
     print obj.s1 + " is a benefit of functions!" 
     print obj.s2 + " is a benefit of functions!" 
     print obj.s3 + " is a benefit of functions!" 

print build_sentence() 

L'errore che sto ottenendo è:

Traceback (most recent call last): 
    Line 15, in <module> 
    print build_sentence() 
    Line 11, in build_sentence 
    print obj.s1 + " is a benefit of functions!" 
AttributeError: 'tuple' object has no attribute 's1' 
+0

non è perfettamente soddisfacente. chiama solo la funzione e quella funzione fa il resto – Gogo

+0

che non si riferisce al codice che hai postato qui. Qualcos'altro deve essere il problema –

+0

questo è tutto il codice ... controlla il link se vuoi ... [link] (http://codepad.org/yQXHzIbE) – Gogo

risposta

11

Si restituiscono quattro variabili s1, s2, s3, s4 e si visualizzano utilizzando una variabile singola obj. Questo è ciò che viene chiamato tuple, obj è associato a 4 valori, i valori di s1,s2,s3,s4. Quindi, utilizzare l'indice mentre si utilizza in un elenco per ottenere il valore desiderato, in ordine.

obj=list_benefits() 
print obj[0] + " is a benefit of functions!" 
print obj[1] + " is a benefit of functions!" 
print obj[2] + " is a benefit of functions!" 
print obj[3] + " is a benefit of functions!" 
6

stai tornando un tuple. Indicalo.

obj=list_benefits() 
print obj[0] + " is a benefit of functions!" 
print obj[1] + " is a benefit of functions!" 
print obj[2] + " is a benefit of functions!" 
4

I nomi delle variabili sono solo localmente significativi.

volta colpito

return s1,s2,s3,s4

alla fine del procedimento, Python costruisce una tupla con i valori di s1, s2, s3 e s4 come suoi quattro membri all'indice 0, 1, 2 e 3 - NON un dizionario con nomi di variabili e valori, ecc.

Se si desidera che i nomi delle variabili siano significativi dopo aver colpito return nel metodo, è necessario creare un oggetto o dizionario.

1
class list_benefits(object): 
    def __init__(self): 
     self.s1 = "More organized code" 
     self.s2 = "More readable code" 
     self.s3 = "Easier code reuse" 

def build_sentence(): 
     obj=list_benefits() 
     print obj.s1 + " is a benefit of functions!" 
     print obj.s2 + " is a benefit of functions!" 
     print obj.s3 + " is a benefit of functions!" 

print build_sentence() 

so che è la risposta in ritardo, forse alcune altre persone possono trarre vantaggio Se si vuole ancora chiamare da "attributi", si potrebbe utilizzare la classe con il costruttore di default, e creare un'istanza della classe come menzionato in altre risposte

Problemi correlati