I yêu Hệ thống trang trí @property
của Python. Tôi thích rằng bạn có thể chạy mã tùy chỉnh khi bạn gọi aClassObect.attribute
. Đặc biệt là để xác thực dữ liệu khi bạn đang thiết lập một thuộc tính. Tuy nhiên, một điều mà tôi muốn, nhưng tôi không thể tìm thấy, là một cách để chạy mã tùy chỉnh khi cố gắng thiết lập một thuộc tính không tồn tại. Ví dụ, nói tôi đã có những lớp sau:Phương pháp "bắt tất cả" Python cho các thuộc tính không xác định/chưa được thực hiện trong các lớp
class C(object):
def __init__(self):
self._x = None
@property
def x(self):
"""I'm the 'x' property."""
return self._x
@x.setter
def x(self, value):
self._x = value
@x.deleter
def x(self):
del self._x
Bây giờ, nếu tôi có myObj
, đó là một thể hiện của lớp C
, và tôi gọi myObject.x = 42
, nó sẽ chạy setter thích hợp, đó là rất tốt cho xác thực dữ liệu. Nhưng điều này không ngăn ai đó gọi số myOjbect.b = 47
và nó sẽ vui vẻ tạo thuộc tính mới có tên là b
. Có cách nào để chạy mã đặc biệt khi thiết lập thuộc tính mới không? Tôi có khả năng tăng lỗi để nói điều gì đó như "lỗi, thuộc tính này không tồn tại".
Tôi có một lớp học làm API cho cơ sở dữ liệu. Mỗi cá thể đại diện cho một mục nhập. Sau khi sửa đổi các thuộc tính của đối tượng, đại diện cho các trường trong cơ sở dữ liệu, bạn gọi 'object.save()' để cập nhật DB. Tôi muốn một lỗi được nâng lên chứ không phải là các lĩnh vực được âm thầm giảm vì họ không thực sự tồn tại trong DB. –