Trong Python 2.x khi bạn muốn đánh dấu một phương pháp như trừu tượng, bạn có thể xác định nó như vậy:tương đương của NotImplementedError cho các lĩnh vực trong Python
class Base:
def foo(self):
raise NotImplementedError("Subclasses should implement this!")
Sau đó, nếu bạn quên để ghi đè lên nó, bạn sẽ có được một ngoại lệ nhắc nhở tốt đẹp. Có cách nào tương đương để đánh dấu một trường là trừu tượng không? Hoặc là nói nó trong lớp docstring tất cả các bạn có thể làm gì?
Lúc đầu, tôi nghĩ rằng tôi có thể đặt trường thành NotImplemented, nhưng khi tôi tra cứu những gì nó thực sự cho (so sánh phong phú) nó có vẻ lạm dụng.
Nó vẫn hoạt động, ngay cả khi mục đích ban đầu của nó là để so sánh chi tiết. Có gì sai với nó? –
Vấn đề đầu tiên là bạn có thể đọc trường từ đối tượng (myvar = Base.field) và điều tiếp theo mà bạn biết là NotImplementeds ở khắp nơi cho đến khi một số phần khác cố gắng sử dụng nó và nhận được một AttributeError bí ẩn. – Kiv
Vấn đề thứ hai là IMO nó cản trở khả năng đọc ("Đó là điều so sánh phong phú làm gì ở đó? Tôi đã bỏ lỡ điều gì đó?) Giải pháp của Evan thể hiện chính xác những gì đang diễn ra theo cách quen thuộc. – Kiv