Abstract base classes can still be handy in Python. Trong khi viết một lớp cơ sở trừu tượng mà tôi muốn mọi lớp con có, chẳng hạn, một phương pháp spam()
, tôi muốn viết một cái gì đó như thế này:Python(), các lớp cơ sở trừu tượng, và NotImplementedError
class Abstract(object):
def spam(self):
raise NotImplementedError
Thách thức này cũng muốn sử dụng super()
và thực hiện nó đúng cách bằng cách đưa nó vào toàn bộ chuỗi lớp con. Trong trường hợp này, có vẻ như tôi phải quấn mỗi super
cuộc gọi như sau:
class Useful(Abstract):
def spam(self):
try:
super(Useful, self).spam()
except NotImplementedError, e:
pass
print("It's okay.")
Đó là okay cho một lớp con đơn giản, nhưng khi viết một lớp học có nhiều phương pháp, thử-trừ điều được một chút rườm rà và một chút xấu xí. Có cách nào tốt hơn để phân lớp từ các lớp cơ sở trừu tượng? Tôi chỉ làm điều đó sai?
Điều đó làm cho rất ít ý nghĩa. Bạn nên biết các phương thức siêu lớp nào được triển khai (mà 'super' có ý nghĩa) và không được triển khai thực hiện bởi vì chúng trừu tượng. Bạn có thể đọc nguồn. –
'nâng SyntaxError' cũng bằng ngôn ngữ. Câu hỏi đặt ra là "tại sao viết tất cả mã đó khi kiểm tra đơn giản của lớp trừu tượng có thể giúp bạn viết tất cả mã đó"? –
@ S.Lott Ah, đã hiểu rồi. Bạn nên gửi nó như một câu trả lời, bằng cách này, bởi vì nó được. – gotgenes