tôi đã học được __str__
Đầu ra của chuỗi đối tượng có thể được xác định.
例子:
lớp Người (đối tượng):
def __init__(bản thân, tên):
self.name = tên
chắc chắn __str__(tự):
return self.name
p1 = Người('Steve Jobs')
p2 = Người('Bill Gates')
p3 = Người('Mark Zuckerberg')
print(p1) # >>> Steve Jobs
nó xuất ra Steve Jobs
Như tôi mong muốn, không<__main__.Person đối tượng tại 0x10410c588>
Tuy nhiên, nếu tôi tạo một danh sách:
lst = [p1, p2, p3]
in(lst)
# >>> [<__main__.Đối tượng Person tại 0x1045433c8>, <__main__.Đối tượng Person tại 0x1045434e0>, <__main__.Đối tượng Person tại 0x104543550>]
Tôi phải:
print([i.__str__() for i in lst])
# >>> ['Steve Jobs', 'Bill Gates', 'Mark Zuckerberg']
Làm cho nó hoạt động? ?
Điều đó không có nhiều ý nghĩa, phải không?
danh sách.__str__
sử dụng đối tượng __repr__
Xây dựng chuỗi. Vì vậy, chỉ cần thay đổi __repr__
ủy quyền cho __str__
:
Trong [1]: lớp Người(đối tượng):
...: def __init__(tự, tên):
...: self.name = tên
...: def __str__(self):
...: trả về self.name
...: def __repr__(self):
...: trả về str(self)
...:
...: p1 = Người('Steve Jobs')
...: p2 = Người('Bill Gates')
...: p3 = Người('Mark Zuckerberg')
...:
Trong [2]: in(p1)
Steve Jobs
Trong [3]: lst = [p1, p2, p3]
...:
Trong [4]: print(lst)
[Steve Jobs, Bill Gates, Mark Zuckerberg]
biên tập
Nếu bạn muốn tuân theo quy ước, hãy làm như sau:
Trong [18]: lớp Người(đối tượng):
...: def __init__(tự, tên):
...: self.name = tên
...: def __str__(self):
...: trả về self.name
...: def __repr__(self):
...: return f"{type(self).__name__}({self.name})"
...:
Trong [19]: p1 = Person('Steve Jobs')
Trong [20]: print([p1])
[Người(Steve Jobs)]
Tôi là một lập trình viên xuất sắc, rất giỏi!