Một lớp trừu tượng có thể được coi là một kế hoạch chi tiết cho các lớp khác. Nó cho phép bạn tạo một tập hợp các phương thức phải được tạo trong bất kỳ lớp con nào được xây dựng từ lớp trừu tượng. Một lớp chứa một hoặc nhiều phương thức trừu tượng được gọi là một lớp trừu tượng. Một phương pháp trừu tượng là một phương pháp có khai báo nhưng không có việc thực hiện. Trong khi chúng tôi đang thiết kế các đơn vị chức năng lớn, chúng tôi sử dụng một lớp trừu tượng. Khi chúng tôi muốn cung cấp một giao diện chung cho các triển khai khác nhau của một thành phần, chúng tôi sử dụng một lớp trừu tượng. [API] cho một tập hợp các lớp con. Khả năng này đặc biệt hữu ích trong các tình huống mà bên thứ ba sẽ cung cấp các triển khai, chẳng hạn như với các plugin, nhưng cũng có thể giúp bạn khi làm việc trong một nhóm lớn hoặc với một cơ sở mã lớn trong đó giữ cho tất cả các lớp trong tâm trí của bạn là khó khăn hoặc không thể. Python đi kèm với một mô -đun cung cấp cơ sở để xác định các lớp cơ sở trừu tượng [ABC] và tên mô -đun đó là ABC. ABC hoạt động bằng cách trang trí các phương pháp của lớp cơ sở là trừu tượng và sau đó đăng ký các lớp bê tông dưới dạng triển khai cơ sở trừu tượng. Một phương pháp trở nên trừu tượng khi được trang trí bằng từ khóa @abstractmethod. Ví dụ - & nbsp;
Why use Abstract Base Classes :
By defining an abstract base class, you can define a common Application Program Interface[API] for a set of subclasses. This capability is especially useful in situations where a third-party is going to provide implementations, such as with plugins, but can also help you when working in a large team or with a large code-base where keeping all classes in
your mind is difficult or not possible.
How Abstract Base classes work :
By default, Python does not provide abstract classes. Python comes with a module that provides the base for defining Abstract Base classes[ABC] and that module name is ABC. ABC works by decorating methods of the base class as abstract and then registering concrete classes as implementations of the abstract base. A method becomes abstract when
decorated with the keyword @abstractmethod. For Example –
Mã 1:
Python3
from
abc
import
ABC, abstractmethod
I can walk and run I can crawl I can bark I can roar0
I can walk and run I can crawl I can bark I can roar1
I can walk and run I can crawl I can bark I can roar2
I can walk and run I can crawl I can bark I can roar3
I can walk and run I can crawl I can bark I can roar2
I can walk and run I can crawl I can bark I can roar5
I can walk and run I can crawl I can bark I can roar6
I can walk and run I can crawl I can bark I can roar7
I can walk and run I can crawl I can bark I can roar8
I can walk and run I can crawl I can bark I can roar9
True True0
I can walk and run I can crawl I can bark I can roar0
True True2
I can walk and run I can crawl I can bark I can roar2
I can walk and run I can crawl I can bark I can roar5
I can walk and run I can crawl I can bark I can roar6
I can walk and run I can crawl I can bark I can roar7
I can walk and run I can crawl I can bark I can roar8
I can walk and run I can crawl I can bark I can roar9
True True9
Abstract Base Class subclass0
Abstract Base Class subclass1
Abstract Base Class subclass2
I can walk and run I can crawl I can bark I can roar0
True True2
I can walk and run I can crawl I can bark I can roar0
Abstract Base Class subclass4
I can walk and run I can crawl I can bark I can roar9
True True9
Abstract Base Class subclass0
Can't instantiate abstract class parent with abstract methods geeks child class3
Abstract Base Class subclass2
I can walk and run I can crawl I can bark I can roar2
I can walk and run I can crawl I can bark I can roar5
I can walk and run I can crawl I can bark I can roar6
I can walk and run I can crawl I can bark I can roar7
I can walk and run I can crawl I can bark I can roar8
I can walk and run I can crawl I can bark I can roar2
I can walk and run I can crawl I can bark I can roar5
I can walk and run I can crawl I can bark I can roar6
I can walk and run I can crawl I can bark I can roar7
I can walk and run I can crawl I can bark I can roar8
I can walk and run I can crawl I can bark I can roar9
True True9
Abstract Base Class subclass0
Traceback [most recent call last]: File "/home/ffe4267d930f204512b7f501bb1bc489.py", line 19, in c=Animal[] TypeError: Can't instantiate abstract class Animal with abstract methods move5
Abstract Base Class subclass2
I can walk and run I can crawl I can bark I can roar0
True True2
I can walk and run I can crawl I can bark I can roar2
I can walk and run I can crawl I can bark I can roar5
I can walk and run I can crawl I can bark I can roar6
I can walk and run I can crawl I can bark I can roar7
I can walk and run I can crawl I can bark I can roar8
I can walk and run I can crawl I can bark I can roar9
True True9
Abstract Base Class subclass0
from
7Abstract Base Class subclass2
I can walk and run I can crawl I can bark I can roar0
True True2
abc
2
I can walk and run I can crawl I can bark I can roar0
Abstract Base Class subclass4
abc
6
I can walk and run I can crawl I can bark I can roar2
I can walk and run I can crawl I can bark I can roar5
I can walk and run I can crawl I can bark I can roar6
I can walk and run I can crawl I can bark I can roar7
I can walk and run I can crawl I can bark I can roar8
abc
2
I can walk and run I can crawl I can bark I can roar0
Can't instantiate abstract class parent with abstract methods geeks child class6
abc
6
I can walk and run
I can crawl
I can bark
I can roar
0 Traceback [most recent call last]:
File "/home/ffe4267d930f204512b7f501bb1bc489.py", line 19, in
c=Animal[]
TypeError: Can't instantiate abstract class Animal with abstract methods move
8
I have 3 sides I have 4 sides I have 5 sides I have 6 sides
from
9abc
0 abc
1
Code 2:
Python3
from
abc
import
ABC, abstractmethod
I can walk and run I can crawl I can bark I can roar0
I can walk and run I can crawl I can bark I can roar1
I can walk and run I can crawl I can bark I can roar2
I can walk and run I can crawl I can bark I can roar5
I can walk and run I can crawl I can bark I can roar6
I can walk and run I can crawl I can bark I can roar7
I can walk and run I can crawl I can bark I can roar8
I can walk and run I can crawl I can bark I can roar9
True True0
I can walk and run I can crawl I can bark I can roar0
True True2
I can walk and run I can crawl I can bark I can roar2
I can walk and run I can crawl I can bark I can roar5
I can walk and run I can crawl I can bark I can roar6
I can walk and run I can crawl I can bark I can roar7
I can walk and run I can crawl I can bark I can roar8
I can walk and run I can crawl I can bark I can roar9
True True9
Abstract Base Class subclass0
I can walk and run I can crawl I can bark I can roar08
Abstract Base Class subclass2
I can walk and run I can crawl I can bark I can roar0
True True2
I can walk and run I can crawl I can bark I can roar2
I can walk and run I can crawl I can bark I can roar5
I can walk and run I can crawl I can bark I can roar6
I can walk and run I can crawl I can bark I can roar7
I can walk and run I can crawl I can bark I can roar8
I can walk and run I can crawl I can bark I can roar9
True True9
Abstract Base Class subclass0
I can walk and run I can crawl I can bark I can roar20
Abstract Base Class subclass2
I can walk and run I can crawl I can bark I can roar0
True True2
I can walk and run I can crawl I can bark I can roar2
I can walk and run I can crawl I can bark I can roar5
I can walk and run I can crawl I can bark I can roar6
I can walk and run I can crawl I can bark I can roar7
I can walk and run I can crawl I can bark I can roar8
I can walk and run I can crawl I can bark I can roar9
True True9
Abstract Base Class subclass0
I can walk and run I can crawl I can bark I can roar32
Abstract Base Class subclass2
I can walk and run I can crawl I can bark I can roar0
True True2
I can walk and run I can crawl I can bark I can roar2
I can walk and run I can crawl I can bark I can roar5
I can walk and run I can crawl I can bark I can roar6
I can walk and run I can crawl I can bark I can roar7
I can walk and run I can crawl I can bark I can roar8
I can walk and run I can crawl I can bark I can roar9
True True9
Abstract Base Class subclass0
I can walk and run I can crawl I can bark I can roar44
Abstract Base Class subclass2
I can walk and run I can crawl I can bark I can roar0
True True2
I can walk and run I can crawl I can bark I can roar49
I can walk and run I can crawl I can bark I can roar0
Abstract Base Class subclass4
I can walk and run I can crawl I can bark I can roar53
I can walk and run I can crawl I can bark I can roar2
I can walk and run I can crawl I can bark I can roar5
I can walk and run I can crawl I can bark I can roar6
I can walk and run I can crawl I can bark I can roar7
I can walk and run I can crawl I can bark I can roar8
I can walk and run I can crawl I can bark I can roar49
I can walk and run I can crawl I can bark I can roar0
Can't instantiate abstract class parent with abstract methods geeks child class6
I can walk and run I can crawl I can bark I can roar53
Output:
I can walk and run I can crawl I can bark I can roar
I can walk and run I can crawl I can bark I can roar0
Traceback [most recent call last]: File "/home/ffe4267d930f204512b7f501bb1bc489.py", line 19, in c=Animal[] TypeError: Can't instantiate abstract class Animal with abstract methods move8
Implementation Through Subclassing :
By subclassing directly from the base, we can avoid the need to register the class explicitly. In this case, the Python class management is used to recognize PluginImplementation as implementing the abstract PluginBase.
Python3
from
9abc
0 abc
1
abc
3abc
0 abc
5
from
9abc
0 abc
9
I can walk and run I can crawl I can bark I can roar9
True True0
abc
3abc
0 import
3
from
9abc
0 abc
9
I can walk and run I can crawl I can bark I can roar9
True True9
Abstract Base Class subclass0
I can walk and run I can crawl I can bark I can roar83
Abstract Base Class subclass2
True True9
I can walk and run I can crawl I can bark I can roar86
I can walk and run I can crawl I can bark I can roar87
I can walk and run I can crawl I can bark I can roar88
True True9
I can walk and run I can crawl I can bark I can roar86
I can walk and run I can crawl I can bark I can roar91
I can walk and run I can crawl I can bark I can roar92
Output:
True True
abc
3abc
0 import
3
Concrete Methods in Abstract Base Classes
:
Concrete classes contain only concrete [normal]methods whereas abstract classes may contain both concrete methods and abstract methods. The concrete class provides an implementation of abstract methods, the abstract base class can also provide an implementation by invoking the methods via super[].
Đầu ra: & nbsp; & nbsp;
Python3
from
9abc
0 abc
1
from
abc
import
ABC, abstractmethod
I can walk and run I can crawl I can bark I can roar0
True True00
I can walk and run I can crawl I can bark I can roar2
I can walk and run I can crawl I can bark I can roar5
True True03
I can walk and run I can crawl I can bark I can roar7
I can walk and run I can crawl I can bark I can roar8
I can walk and run I can crawl I can bark I can roar9
True True9
Abstract Base Class subclass0
True True09
Abstract Base Class subclass2
I can walk and run I can crawl I can bark I can roar0
True True12
I can walk and run I can crawl I can bark I can roar2
I can walk and run I can crawl I can bark I can roar5
True True03
I can walk and run I can crawl I can bark I can roar7
I can walk and run I can crawl I can bark I can roar8
I can walk and run I can crawl I can bark I can roar9
True True19
True True20
I can walk and run I can crawl I can bark I can roar9
True True9
Abstract Base Class subclass0
True True24
Abstract Base Class subclass2
I can walk and run I can crawl I can bark I can roar0
True True12
True True29
Output:
Abstract Base Class subclass
True True26
abc
0 True True28
Abstract Properties :
Abstract classes include attributes in addition to methods, you can require the attributes in concrete classes by defining them with @abstractproperty.
Python3
Trong chương trình trên, chúng ta có thể gọi các phương thức trong các lớp trừu tượng bằng cách sử dụng Super []. & NBSP; & nbsp; & nbsp; thuộc tính trừu tượng: & nbsp; các lớp trừu tượng bao gồm các thuộc tính ngoài các phương thức, bạn có thể yêu cầu các thuộc tính trong các lớp cụ thể bằng cách xác định chúng với @Tóm tắtProperty. & NBSP; & NBSP;
import
I can walk and run I can crawl I can bark I can roar63
from
abc
import
ABC, abstractmethod
I can walk and run I can crawl I can bark I can roar2
True True39
True True40
I can walk and run I can crawl I can bark I can roar0
True True37
I can walk and run I can crawl I can bark I can roar2
I can walk and run I can crawl I can bark I can roar5
I can walk and run I can crawl I can bark I can roar68
I can walk and run I can crawl I can bark I can roar7
I can walk and run I can crawl I can bark I can roar8
I can walk and run I can crawl I can bark I can roar9
True True47
True True48
I can walk and run I can crawl I can bark I can roar2
True True52
I can walk and run I can crawl I can bark I can roar0
True True37
I can walk and run I can crawl I can bark I can roar2
I can walk and run I can crawl I can bark I can roar5
I can walk and run I can crawl I can bark I can roar68
I can walk and run I can crawl I can bark I can roar7
I can walk and run I can crawl I can bark I can roar8
True True61
True True62
I can walk and run I can crawl I can bark I can roar2
True True26
abc
0True True66
I can walk and run I can crawl I can bark I can roar2
True True9
True True69
I can walk and run I can crawl I can bark I can roar9
True True47
True True48
I can walk and run I can crawl I can bark I can roar0
I can walk and run I can crawl I can bark I can roar74
I can walk and run I can crawl I can bark I can roar9
True True47
I can walk and run I can crawl I can bark I can roar83
True True70
True True71
Output:
Can't instantiate abstract class parent with abstract methods geeks child class
I can walk and run I can crawl I can bark I can roar2
True True9
True True74
Abstract Class Instantiation :
Abstract classes are incomplete because they have methods that have nobody. If python allows creating an object for abstract classes then using that object if anyone calls the abstract method, but there is no actual implementation to invoke. So we use an abstract class as a template and according to the need, we extend it and build on it before we can use it. Due to the fact, an abstract class is not a concrete class, it cannot be instantiated. When we create an object for the abstract class it raises an error.
Python3
True True26
abc
0 True True77
True True9
True True79
I can walk and run I can crawl I can bark I can roar2
I can walk and run I can crawl I can bark I can roar3
Trong ví dụ trên, lớp cơ sở không thể được khởi tạo vì nó chỉ có phiên bản trừu tượng của phương thức getter thuộc tính. Nếu Python cho phép tạo một đối tượng cho các lớp trừu tượng thì sử dụng đối tượng đó nếu bất kỳ ai gọi phương thức trừu tượng, nhưng không có triển khai thực tế để gọi. Vì vậy, chúng tôi sử dụng một lớp trừu tượng làm mẫu và theo nhu cầu, chúng tôi mở rộng nó và xây dựng nó trước khi chúng tôi có thể sử dụng nó. Do thực tế, một lớp trừu tượng không phải là một lớp cụ thể, nó không thể được khởi tạo. Khi chúng ta tạo một đối tượng cho lớp trừu tượng, nó sẽ gây ra lỗi. & Nbsp; & nbsp;
I can walk and run I can crawl I can bark I can roar9
True True0
from
abc
import
True True83
Trong ví dụ trên, lớp cơ sở không thể được khởi tạo vì nó chỉ có phiên bản trừu tượng của phương thức getter thuộc tính. Nếu Python cho phép tạo một đối tượng cho các lớp trừu tượng thì sử dụng đối tượng đó nếu bất kỳ ai gọi phương thức trừu tượng, nhưng không có triển khai thực tế để gọi. Vì vậy, chúng tôi sử dụng một lớp trừu tượng làm mẫu và theo nhu cầu, chúng tôi mở rộng nó và xây dựng nó trước khi chúng tôi có thể sử dụng nó. Do thực tế, một lớp trừu tượng không phải là một lớp cụ thể, nó không thể được khởi tạo. Khi chúng ta tạo một đối tượng cho lớp trừu tượng, nó sẽ gây ra lỗi. & Nbsp; & nbsp;
I can walk and run I can crawl I can bark I can roar9
True True9
Abstract Base Class subclass0
I can walk and run I can crawl I can bark I can roar08
Abstract Base Class subclass2
from
abc
import
True True83
Trong ví dụ trên, lớp cơ sở không thể được khởi tạo vì nó chỉ có phiên bản trừu tượng của phương thức getter thuộc tính. Nếu Python cho phép tạo một đối tượng cho các lớp trừu tượng thì sử dụng đối tượng đó nếu bất kỳ ai gọi phương thức trừu tượng, nhưng không có triển khai thực tế để gọi. Vì vậy, chúng tôi sử dụng một lớp trừu tượng làm mẫu và theo nhu cầu, chúng tôi mở rộng nó và xây dựng nó trước khi chúng tôi có thể sử dụng nó. Do thực tế, một lớp trừu tượng không phải là một lớp cụ thể, nó không thể được khởi tạo. Khi chúng ta tạo một đối tượng cho lớp trừu tượng, nó sẽ gây ra lỗi. & Nbsp; & nbsp;
I can walk and run I can crawl I can bark I can roar9
True True9
Abstract Base Class subclass0
I can walk and run I can crawl I can bark I can roar20
Abstract Base Class subclass2
from
abc
import
True True83
Trong ví dụ trên, lớp cơ sở không thể được khởi tạo vì nó chỉ có phiên bản trừu tượng của phương thức getter thuộc tính. Nếu Python cho phép tạo một đối tượng cho các lớp trừu tượng thì sử dụng đối tượng đó nếu bất kỳ ai gọi phương thức trừu tượng, nhưng không có triển khai thực tế để gọi. Vì vậy, chúng tôi sử dụng một lớp trừu tượng làm mẫu và theo nhu cầu, chúng tôi mở rộng nó và xây dựng nó trước khi chúng tôi có thể sử dụng nó. Do thực tế, một lớp trừu tượng không phải là một lớp cụ thể, nó không thể được khởi tạo. Khi chúng ta tạo một đối tượng cho lớp trừu tượng, nó sẽ gây ra lỗi. & Nbsp; & nbsp;
I can walk and run I can crawl I can bark I can roar9
True True9
Abstract Base Class subclass0
I can walk and run I can crawl I can bark I can roar32
Abstract Base Class subclass2
from
abc
import
True True83
Trong ví dụ trên, lớp cơ sở không thể được khởi tạo vì nó chỉ có phiên bản trừu tượng của phương thức getter thuộc tính. Nếu Python cho phép tạo một đối tượng cho các lớp trừu tượng thì sử dụng đối tượng đó nếu bất kỳ ai gọi phương thức trừu tượng, nhưng không có triển khai thực tế để gọi. Vì vậy, chúng tôi sử dụng một lớp trừu tượng làm mẫu và theo nhu cầu, chúng tôi mở rộng nó và xây dựng nó trước khi chúng tôi có thể sử dụng nó. Do thực tế, một lớp trừu tượng không phải là một lớp cụ thể, nó không thể được khởi tạo. Khi chúng ta tạo một đối tượng cho lớp trừu tượng, nó sẽ gây ra lỗi. & Nbsp; & nbsp;
I can walk and run I can crawl I can bark I can roar9
True True9
Abstract Base Class subclass0
I can walk and run I can crawl I can bark I can roar44
Abstract Base Class subclass2
Abstract Base Class subclass43
abc
0Abstract Base Class subclass45
Output:
Traceback [most recent call last]: File "/home/ffe4267d930f204512b7f501bb1bc489.py", line 19, in c=Animal[] TypeError: Can't instantiate abstract class Animal with abstract methods move