2009-01-14 43 views
5

Đây có lẽ là một câu hỏi thường gặp nhưng tôi có thể làm với trợ giúp về điều này. Tôi có một danh sách các đối tượng lớp và tôi đang cố gắng tìm ra cách làm cho nó in một mục từ lớp đó nhưng thay vì desplaying trong;python - danh sách các đối tượng có thể đọc được

<__main__.evolutions instance at 0x01B8EA08> 

nhưng thay vào đó để hiển thị thuộc tính đã chọn của đối tượng được chọn của lớp. có ai giúp được không?

Trả lời

8

Nếu bạn muốn chỉ hiển thị một thuộc tính cụ thể của từng cá thể của lớp, bạn có thể làm

print([obj.attr for obj in my_list_of_objs]) 

Điều này sẽ in ra thuộc tính attr của từng đối tượng trong danh sách my_list_of_objs. Ngoài ra, bạn có thể xác định phương pháp __str__() cho lớp học của bạn, xác định làm thế nào để chuyển đổi đối tượng của bạn thành chuỗi:

class evolutions: 
    def __str__(self): 
     # return string representation of self 

print(my_list_of_objs) # each object is now printed out according to its __str__() method 
4

Bạn sẽ muốn ghi đè "chuỗi" phương pháp của lớp học của bạn:

class Foo: 
    def __str__(self): 
     return "String representation of me" 
2

Bạn cần phải ghi đè hoặc là __str__, hoặc __repr__ phương pháp đối tượng của bạn [s]

1

Sở thích của tôi là xác định hàm __repr__ có thể tái tạo lại đối tượng (bất cứ khi nào có thể). Trừ khi bạn có số __str__, cả hai số repr()str() sẽ gọi phương thức này.

Vì vậy, ví dụ

class Foo(object): 
    def __init__(self, a, b): 
     self.a = a 
     self.b = b 
    def __repr__(self): 
     return 'Foo(%r, %r)' % (self.a, self.b) 

Làm theo cách này, bạn có một chuỗi phiên bản có thể đọc được, và như là một tiền thưởng nó có thể được eval'ed để có được một bản sao của đối tượng gốc.

x = Foo(5, 1 + 1) 
y = eval(str(x)) 

print y 
-> Foo(5, 2) 
Các vấn đề liên quan