2010-02-03 63 views
6

Tôi nên viết mã để kiểm tra tính hợp lệ của các thuộc tính của lớp học ở đâu? (Ví dụ: "số tiền" phải là số nguyên dương, "email" phải là chuỗi có định dạng e-mail chính xác) Tại phương thức setter, Ở đâu đó tôi sử dụng (sử dụng try/catch) hoặc các phương thức khác.Kiểm tra tính hợp lệ của các thuộc tính trong các lớp học Python

Nếu tôi kiểm tra tính hợp lệ ở các phương thức setter, nó có thể trông xấu xí (như kiểm tra kiểu). Nhưng nếu tôi kiểm tra nó khi sử dụng nó, mã trùng lặp có thể xuất hiện khi nó được sử dụng nhiều lần.

(Xin lỗi vì tiếng Anh kém tôi.)

Trả lời

4

Chắc chắn làm điều đó trong setter, nếu bạn cần phải làm điều đó cả.

Đầu tiên, setter có thể được gọi là ít thường xuyên hơn so với getters, vì vậy bạn đang làm ít công việc hơn.

Thứ hai, bạn gặp vấn đề sớm hơn.

Thứ ba, nó giữ trạng thái bên trong của đối tượng nhất quán. Lưu giữ dữ liệu xấu có nghĩa là bạn biết rằng đối tượng của bạn là "đúng".

+0

+1: Trạng thái bên trong của đối tượng phải hoàn hảo, nhất quán, chính xác. –

2

Nếu nó trông giống như kiểm tra loại xấu xí, có thể là do nó được. Nếu "số tiền" hoàn toàn cần phải là một số nguyên dương, và phần còn lại của mô-đun sẽ thất bại nặng nếu nó không phải là, sau đó bạn cần phải làm một số loại kiểm tra.

Cách trăn làm điều này, tuy nhiên, chỉ để kiểm tra các thuộc tính thực tế mà bạn yêu cầu.

Trong ví dụ số nguyên dương, điều đó có nghĩa là không kiểm tra giá trị là đối tượng Int hay không. các con số, mà không ràng buộc chặt chẽ loại của chúng.

Điều tương tự cũng xảy ra với ví dụ email - kiểm tra xem nó có được định dạng đúng hay không (không khớp với bất kỳ email nào bạn đang sử dụng), nhưng đừng nhấn mạnh rằng đó là một thể hiện của lớp Str. Đừng nhấn mạnh vào bất cứ điều gì trong kiểm tra tính hợp lệ của bạn ngoại trừ các thuộc tính mà bạn thực sự sẽ sử dụng.

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