2013-06-25 43 views
14

Tôi là người mới bắt đầu trong python. Tôi không thể hiểu vấn đề là gì?AttributeError: đối tượng 'tuple' không có thuộc tính

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() 

Các lỗi tôi nhận được là:

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

không có điều gì hoàn hảo ... chỉ cần gọi hàm và chức năng đó thực hiện phần còn lại – Gogo

+0

Điều đó không liên quan đến mã bạn đã đăng ở đây. Cái gì khác phải là vấn đề –

+0

thats toàn bộ mã ... kiểm tra liên kết nếu u muốn ... [link] (http://codepad.org/yQXHzIbE) – Gogo

Trả lời

11

Bạn trả lại bốn biến s1, s2, s3, s4 và khôi phục chúng bằng một biến obj đơn. Đây được gọi là tuple, obj được kết hợp với 4 giá trị, giá trị là s1,s2,s3,s4. Vì vậy, hãy sử dụng chỉ mục khi bạn sử dụng trong danh sách để có được giá trị bạn muốn, theo thứ tự.

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

Bạn đang trả lại một tuple. Lập chỉ mục nó.

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

Tên biến chỉ mang ý nghĩa địa phương.

Khi bạn nhấn

return s1,s2,s3,s4

ở phần cuối của phương pháp này, Python xây dựng một tuple với các giá trị của s1, s2, s3 và s4 như bốn thành viên của mình tại chỉ số 0, 1, 2 và 3 - KHÔNG phải là từ điển tên biến cho giá trị, KHÔNG phải là đối tượng có tên biến và giá trị của chúng, v.v.

Nếu bạn muốn tên biến có ý nghĩa sau khi nhấn return trong phương pháp, bạn phải tạo đối tượng hoặc từ điển.

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() 

Tôi biết đó là câu trả lời muộn, có thể một số dân tộc khác có thể đem lại lợi ích Nếu bạn vẫn muốn gọi bằng "thuộc tính", bạn có thể sử dụng lớp với constructor mặc định, và tạo ra một thể hiện của lớp như đã đề cập trong các câu trả lời khác

Các vấn đề liên quan