Tôi đang xây dựng một lớp đơn giản bằng Python. Tôi đã xác định cho riêng mình __str__
phương thức này, nó sẽ hoạt động tốt khi tôi gọi print trên một thể hiện của lớp. Khi tôi tạo một thể hiện của lớp và gọi nó in
, xảy ra lỗi:
TypeError: __str__ trả về không phải chuỗi (loại NoneType)
Tôi hiểu lỗi, nó cho tôi biết rằng hàm này không trả về bất cứ thứ gì (nó trả vềKhông có
)
lớp Xe (đối tượng):
def __init__(tự, gõ, hãng sản xuất, kiểu máy, màu sắc, năm, dặm):
self.typ = gõ
self.make = làm
self.model = người mẫu
self.color = color.low()
tự.năm = năm
self.miles = dặm
chắc chắn __str__(tự):
print('Loại xe: ' + str(self.typ))
print('Make: ' + str(self.make))
print('Model: ' + str(self.model))
print('Năm: ' + str(self.year))
print('Dặm: ' + str(self.miles))
#return '' # Tôi có thể tránh gặp lỗi nếu tôi bỏ bình luận dòng này
bmw = Xe('SUV', 'BMW', 'X5', 'bạc', 2003, 12030)
in bmw
Như bạn có thể thấy, tôi __str__
Hàm chứa tất cả các câu lệnh in mà tôi muốn. Tôi không cần nó để trả lại bất cứ điều gì. Đây là đầu ra tôi muốn.
Loại xe: SUV
Hãng sản xuất: BMW
Model: X5
Năm: 2003
Dặm: 12030
Làm cách nào tôi có thể nhận được đầu ra này? Tôi đã thử cách này để tránh lỗi in nhưng lỗi vẫn xuất hiện:
chắc chắn __str__(tự):
thử:
print('Loại xe: ' + str(self.typ))
print('Make: ' + str(self.make))
print('Model: ' + str(self.model))
print('Năm: ' + str(self.year))
print('Dặm: ' + str(self.miles))
ngoại trừ:
vượt qua
theo __str__
tài liệu,
Được gọi bằng hàm dựng sẵn str() và bằng câu lệnh print để tính toán biểu diễn chuỗi “không chính thức” của một đối tượng. đại diện() trong đó nó không nhất thiết phải là một biểu thức Python hợp lệ: thay vào đó có thể sử dụng một biểu diễn ngắn gọn hoặc thuận tiện hơn. Giá trị trả về phải là một đối tượng chuỗi.
因此,__str__
Giá trị trả về phải là một chuỗi, trong trường hợp của bạn, bạn không trả về bất cứ thứ gì nên Python trả về theo mặc định Không có
.
Bạn có thể làm điều này bằng cách thay đổi __str__
để có được đầu ra mong muốn như hiển thị bên dưới
chắc chắn __str__(tự):
return "Loại xe: {}\nSản xuất: {}\nMẫu xe: {}\nNăm: {}\nSố dặm: {}" \
.format(self.typ, self.make, self.model, self.year, self.miles)
Tôi là một lập trình viên xuất sắc, rất giỏi!