Tôi đã đọc tài liệu python về các lớp cơ sở trừu tượng:python @abstractmethod trang trí
Từ here:
abc.abstractmethod(function)
Một trang trí cho thấy phương pháp trừu tượng.Sử dụng trang trí này yêu cầu metaclass của lớp là
ABCMeta
hoặc có nguồn gốc từ nó. Một lớp có một metaclass bắt nguồn từABCMeta
không thể được khởi tạo trừ khi tất cả các phương thức trừu tượng của nó và các thuộc tính bị ghi đè.
Và here
Bạn có thể áp dụng các
@abstractmethod
trang trí với các phương pháp như bốc thăm() đó phải được thực hiện; Sau đó, Python sẽ tăng ngoại lệ cho các lớp không xác định phương thức. Lưu ý rằng ngoại lệ chỉ là được tăng lên khi bạn thực sự cố tạo một cá thể của lớp con thiếu phương thức.
Tôi đã sử dụng mã này để kiểm tra mà ra:
import abc
class AbstractClass(object):
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def abstractMethod(self):
return
class ConcreteClass(AbstractClass):
def __init__(self):
self.me = "me"
c = ConcreteClass()
c.abstractMethod()
Mã này đi tốt, vì vậy tôi không nhận được nó. Nếu tôi nhập c.abstractMethod
Tôi nhận được:
<bound method ConcreteClass.abstractMethod of <__main__.ConcreteClass object at 0x7f694da1c3d0>>
Tôi đang thiếu gì ở đây? ConcreteClass
phải triển khai các phương pháp trừu tượng, nhưng tôi không có ngoại lệ.
Python nào? Nó báo cáo lỗi chỉ tốt cho tôi. Ngoài ra, bạn luôn có thể nâng NotImplementedError thay vì sử dụng 'abc'. –
Tôi đăng nhận xét về câu trả lời mouad, liên kết từ 'python' được đặt làm mặc định thành' python3'. Tôi sẽ giữ trong tâm trí nâng cao ngoại lệ, như writting mã di động với những thay đổi trên python có vẻ xa từ kiến thức python của tôi. – Sebastian