Trước hết, tôi biết rằng hàm __init__()
của một lớp trong Python không thể trả về một giá trị, vì vậy đáng buồn là tùy chọn này không khả dụng.Python __init__ trả lại lỗi để tạo
Do cấu trúc mã của tôi, nên có xác nhận dữ liệu (và lời nhắc để người dùng cung cấp thông tin) bên trong hàm __init__
của lớp. Tuy nhiên, điều này có nghĩa rằng việc tạo ra các đối tượng có thể thất bại, và tôi muốn có thể phục hồi một cách duyên dáng từ này.
Tôi đã tự hỏi cách tốt nhất để tiếp tục điều này là gì. Tôi đã xem xét việc thiết lập một boolean toàn cầu như một lá cờ 'xây dựng hợp lệ', nhưng tôi không muốn.
Bất kỳ ý tưởng nào khác (ngoài việc tái cấu trúc để các xác nhận có thể xảy ra bên ngoài việc khởi tạo và các giá trị được chuyển thành đối số)? Tôi về cơ bản đang tìm kiếm một cách để có được 0 trở về thành công và trả về -1 trên thất bại trong quá trình khởi tạo. (Giống như hầu hết các cuộc gọi hệ thống C)
Tăng ngoại lệ. –
Trả về 0 thành công và -1 về thất bại là rất un-Pythonic. Lỗi trả về là xấu, vì chúng dễ bỏ qua và tiết kiệm để xử lý. Ngày đầu đó, sử dụng 0 và -1 là giá trị boolean chỉ thêm nhầm lẫn mà không có lợi ích. Không đúng khi sử dụng Python để viết mã C. – abarnert
Khi @jsbueno chỉ ra câu trả lời của mình, các cá thể lớp là _initialized_ trong '__init __()', không được tạo ra, đó là lý do tại sao nó không 'trả về' một giá trị. Thay vì sử dụng biến toàn cầu để phát hiện lỗi hoặc thực hiện một ngoại lệ, bạn có thể thêm thành viên dữ liệu vào lớp của bạn để biểu thị trạng thái của nó và sau đó kiểm tra trực tiếp giá trị của nó hoặc gọi phương thức trả về giá trị của nó sau '__init __()' được gọi để xác định xem có bất cứ điều gì (và có thể là gì) khi sai. – martineau