Hướng dẫn why we use abstract method in python? - tại sao chúng ta sử dụng phương thức trừu tượng trong python?

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 roar
0
I can walk and run
I can crawl
I can bark
I can roar
1

I can walk and run
I can crawl
I can bark
I can roar
2
I can walk and run
I can crawl
I can bark
I can roar
3

I can walk and run
I can crawl
I can bark
I can roar
2
I can walk and run
I can crawl
I can bark
I can roar
5
I can walk and run
I can crawl
I can bark
I can roar
6
I can walk and run
I can crawl
I can bark
I can roar
7
I can walk and run
I can crawl
I can bark
I can roar
8

I can walk and run
I can crawl
I can bark
I can roar
9
True
True
0

I can walk and run
I can crawl
I can bark
I can roar
0
True
True
2

I can walk and run
I can crawl
I can bark
I can roar
2
I can walk and run
I can crawl
I can bark
I can roar
5
I can walk and run
I can crawl
I can bark
I can roar
6
I can walk and run
I can crawl
I can bark
I can roar
7
I can walk and run
I can crawl
I can bark
I can roar
8

I can walk and run
I can crawl
I can bark
I can roar
9
True
True
9
Abstract Base Class
subclass
0
Abstract Base Class
subclass
1
Abstract Base Class
subclass
2

I can walk and run
I can crawl
I can bark
I can roar
0
True
True
2

I can walk and run
I can crawl
I can bark
I can roar
0
Abstract Base Class
subclass
4

I can walk and run
I can crawl
I can bark
I can roar
9
True
True
9
Abstract Base Class
subclass
0
Can't instantiate abstract class parent with abstract methods geeks
child class
3
Abstract Base Class
subclass
2

I can walk and run
I can crawl
I can bark
I can roar
2
I can walk and run
I can crawl
I can bark
I can roar
5
I can walk and run
I can crawl
I can bark
I can roar
6
I can walk and run
I can crawl
I can bark
I can roar
7
I can walk and run
I can crawl
I can bark
I can roar
8

I can walk and run
I can crawl
I can bark
I can roar
2
I can walk and run
I can crawl
I can bark
I can roar
5
I can walk and run
I can crawl
I can bark
I can roar
6
I can walk and run
I can crawl
I can bark
I can roar
7
I can walk and run
I can crawl
I can bark
I can roar
8

I can walk and run
I can crawl
I can bark
I can roar
9
True
True
9
Abstract Base Class
subclass
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
5
Abstract Base Class
subclass
2

I can walk and run
I can crawl
I can bark
I can roar
0
True
True
2

I can walk and run
I can crawl
I can bark
I can roar
2
I can walk and run
I can crawl
I can bark
I can roar
5
I can walk and run
I can crawl
I can bark
I can roar
6
I can walk and run
I can crawl
I can bark
I can roar
7
I can walk and run
I can crawl
I can bark
I can roar
8

I can walk and run
I can crawl
I can bark
I can roar
9
True
True
9
Abstract Base Class
subclass
0from7
Abstract Base Class
subclass
2

I can walk and run
I can crawl
I can bark
I can roar
0
True
True
2

abc 2

I can walk and run
I can crawl
I can bark
I can roar
0
Abstract Base Class
subclass
4

abc 6

I can walk and run
I can crawl
I can bark
I can roar
2
I can walk and run
I can crawl
I can bark
I can roar
5
I can walk and run
I can crawl
I can bark
I can roar
6
I can walk and run
I can crawl
I can bark
I can roar
7
I can walk and run
I can crawl
I can bark
I can roar
8

abc 2

I can walk and run
I can crawl
I can bark
I can roar
0
Can't instantiate abstract class parent with abstract methods geeks
child class
6

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

from9abc 0 abc 1
Code 2: 

Python3

from abc import ABC, abstractmethod

I can walk and run
I can crawl
I can bark
I can roar
0
I can walk and run
I can crawl
I can bark
I can roar
1

I can walk and run
I can crawl
I can bark
I can roar
2
I can walk and run
I can crawl
I can bark
I can roar
5
I can walk and run
I can crawl
I can bark
I can roar
6
I can walk and run
I can crawl
I can bark
I can roar
7
I can walk and run
I can crawl
I can bark
I can roar
8

I can walk and run
I can crawl
I can bark
I can roar
9
True
True
0

I can walk and run
I can crawl
I can bark
I can roar
0
True
True
2

I can walk and run
I can crawl
I can bark
I can roar
2
I can walk and run
I can crawl
I can bark
I can roar
5
I can walk and run
I can crawl
I can bark
I can roar
6
I can walk and run
I can crawl
I can bark
I can roar
7
I can walk and run
I can crawl
I can bark
I can roar
8

I can walk and run
I can crawl
I can bark
I can roar
9
True
True
9
Abstract Base Class
subclass
0
I can walk and run
I can crawl
I can bark
I can roar
08
Abstract Base Class
subclass
2

I can walk and run
I can crawl
I can bark
I can roar
0
True
True
2

I can walk and run
I can crawl
I can bark
I can roar
2
I can walk and run
I can crawl
I can bark
I can roar
5
I can walk and run
I can crawl
I can bark
I can roar
6
I can walk and run
I can crawl
I can bark
I can roar
7
I can walk and run
I can crawl
I can bark
I can roar
8

I can walk and run
I can crawl
I can bark
I can roar
9
True
True
9
Abstract Base Class
subclass
0
I can walk and run
I can crawl
I can bark
I can roar
20
Abstract Base Class
subclass
2

I can walk and run
I can crawl
I can bark
I can roar
0
True
True
2

I can walk and run
I can crawl
I can bark
I can roar
2
I can walk and run
I can crawl
I can bark
I can roar
5
I can walk and run
I can crawl
I can bark
I can roar
6
I can walk and run
I can crawl
I can bark
I can roar
7
I can walk and run
I can crawl
I can bark
I can roar
8

I can walk and run
I can crawl
I can bark
I can roar
9
True
True
9
Abstract Base Class
subclass
0
I can walk and run
I can crawl
I can bark
I can roar
32
Abstract Base Class
subclass
2

I can walk and run
I can crawl
I can bark
I can roar
0
True
True
2

I can walk and run
I can crawl
I can bark
I can roar
2
I can walk and run
I can crawl
I can bark
I can roar
5
I can walk and run
I can crawl
I can bark
I can roar
6
I can walk and run
I can crawl
I can bark
I can roar
7
I can walk and run
I can crawl
I can bark
I can roar
8

I can walk and run
I can crawl
I can bark
I can roar
9
True
True
9
Abstract Base Class
subclass
0
I can walk and run
I can crawl
I can bark
I can roar
44
Abstract Base Class
subclass
2

I can walk and run
I can crawl
I can bark
I can roar
0
True
True
2

I can walk and run
I can crawl
I can bark
I can roar
49

I can walk and run
I can crawl
I can bark
I can roar
0
Abstract Base Class
subclass
4

I can walk and run
I can crawl
I can bark
I can roar
53

I can walk and run
I can crawl
I can bark
I can roar
2
I can walk and run
I can crawl
I can bark
I can roar
5
I can walk and run
I can crawl
I can bark
I can roar
6
I can walk and run
I can crawl
I can bark
I can roar
7
I can walk and run
I can crawl
I can bark
I can roar
8

I can walk and run
I can crawl
I can bark
I can roar
49

I can walk and run
I can crawl
I can bark
I can roar
0
Can't instantiate abstract class parent with abstract methods geeks
child class
6

I can walk and run
I can crawl
I can bark
I can roar
53

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 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
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

from9abc 0 abc 1

abc 3abc 0 abc 5

from9abc 0 abc 9

I can walk and run
I can crawl
I can bark
I can roar
9
True
True
0

abc 3abc 0 import3

from9abc 0 abc 9

I can walk and run
I can crawl
I can bark
I can roar
9
True
True
9
Abstract Base Class
subclass
0
I can walk and run
I can crawl
I can bark
I can roar
83
Abstract Base Class
subclass
2

True
True
9
I can walk and run
I can crawl
I can bark
I can roar
86
I can walk and run
I can crawl
I can bark
I can roar
87
I can walk and run
I can crawl
I can bark
I can roar
88

True
True
9
I can walk and run
I can crawl
I can bark
I can roar
86
I can walk and run
I can crawl
I can bark
I can roar
91
I can walk and run
I can crawl
I can bark
I can roar
92

Output:   
 

True
True

abc 3abc 0 import3
  
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

from9abc 0 abc 1

from abc import ABC, abstractmethod

I can walk and run
I can crawl
I can bark
I can roar
0
True
True
00

I can walk and run
I can crawl
I can bark
I can roar
2
I can walk and run
I can crawl
I can bark
I can roar
5
True
True
03
I can walk and run
I can crawl
I can bark
I can roar
7
I can walk and run
I can crawl
I can bark
I can roar
8

I can walk and run
I can crawl
I can bark
I can roar
9
True
True
9
Abstract Base Class
subclass
0
True
True
09
Abstract Base Class
subclass
2

I can walk and run
I can crawl
I can bark
I can roar
0
True
True
12

I can walk and run
I can crawl
I can bark
I can roar
2
I can walk and run
I can crawl
I can bark
I can roar
5
True
True
03
I can walk and run
I can crawl
I can bark
I can roar
7
I can walk and run
I can crawl
I can bark
I can roar
8

I can walk and run
I can crawl
I can bark
I can roar
9
True
True
19
True
True
20

I can walk and run
I can crawl
I can bark
I can roar
9
True
True
9
Abstract Base Class
subclass
0
True
True
24
Abstract Base Class
subclass
2

I can walk and run
I can crawl
I can bark
I can roar
0
True
True
12

True
True
29

Output:   
 

Abstract Base Class
subclass

True
True
26abc 0
True
True
28
  
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 roar
63

from abc import ABC, abstractmethod

I can walk and run
I can crawl
I can bark
I can roar
2
True
True
39
True
True
40

I can walk and run
I can crawl
I can bark
I can roar
0
True
True
37

I can walk and run
I can crawl
I can bark
I can roar
2
I can walk and run
I can crawl
I can bark
I can roar
5
I can walk and run
I can crawl
I can bark
I can roar
68
I can walk and run
I can crawl
I can bark
I can roar
7
I can walk and run
I can crawl
I can bark
I can roar
8

I can walk and run
I can crawl
I can bark
I can roar
9
True
True
47
True
True
48

I can walk and run
I can crawl
I can bark
I can roar
2
True
True
52

I can walk and run
I can crawl
I can bark
I can roar
0
True
True
37

I can walk and run
I can crawl
I can bark
I can roar
2
I can walk and run
I can crawl
I can bark
I can roar
5
I can walk and run
I can crawl
I can bark
I can roar
68
I can walk and run
I can crawl
I can bark
I can roar
7
I can walk and run
I can crawl
I can bark
I can roar
8

True
True
61
True
True
62

I can walk and run
I can crawl
I can bark
I can roar
2
True
True
26abc 0
True
True
66

I can walk and run
I can crawl
I can bark
I can roar
2
True
True
9
True
True
69

I can walk and run
I can crawl
I can bark
I can roar
9
True
True
47
True
True
48

I can walk and run
I can crawl
I can bark
I can roar
0
I can walk and run
I can crawl
I can bark
I can roar
74

I can walk and run
I can crawl
I can bark
I can roar
9
True
True
47
I can walk and run
I can crawl
I can bark
I can roar
83

True
True
70
True
True
71

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 roar
2
True
True
9
True
True
74
  
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
True
26abc 0
True
True
77

True
True
9
True
True
79

I can walk and run
I can crawl
I can bark
I can roar
2
I can walk and run
I can crawl
I can bark
I can roar
3

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 roar
9
True
True
0

from abc import

True
True
83

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 roar
9
True
True
9
Abstract Base Class
subclass
0
I can walk and run
I can crawl
I can bark
I can roar
08
Abstract Base Class
subclass
2

from abc import

True
True
83

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 roar
9
True
True
9
Abstract Base Class
subclass
0
I can walk and run
I can crawl
I can bark
I can roar
20
Abstract Base Class
subclass
2

from abc import

True
True
83

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 roar
9
True
True
9
Abstract Base Class
subclass
0
I can walk and run
I can crawl
I can bark
I can roar
32
Abstract Base Class
subclass
2

from abc import

True
True
83

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 roar
9
True
True
9
Abstract Base Class
subclass
0
I can walk and run
I can crawl
I can bark
I can roar
44
Abstract Base Class
subclass
2

Abstract Base Class
subclass
43abc 0
Abstract Base Class
subclass
45

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

Tại sao phương pháp trừu tượng được sử dụng trong Python?

Trừu tượng được sử dụng để ẩn chức năng nội bộ của hàm từ người dùng. Người dùng chỉ tương tác với việc triển khai cơ bản của chức năng, nhưng hoạt động bên trong được ẩn. Người dùng quen thuộc với "Chức năng nào" nhưng họ không biết "nó hoạt động như thế nào."to hide the internal functionality of the function from the users. The users only interact with the basic implementation of the function, but inner working is hidden. User is familiar with that "what function does" but they don't know "how it does."

Việc sử dụng phương pháp trừu tượng là gì?

Các phương pháp trừu tượng là những loại phương pháp không yêu cầu thực hiện cho tuyên bố của nó. Những phương pháp này không có cơ thể có nghĩa là không thực hiện. Một vài thuộc tính của một phương thức trừu tượng là: một phương thức trừu tượng trong Java được khai báo thông qua từ khóa Tóm tắt.methods that don't require implementation for its declaration. These methods don't have a body which means no implementation. A few properties of an abstract method are: An abstract method in Java is declared through the keyword “abstract”.

Tại sao chúng ta cần Python lớp trừu tượng?

Trong Python, các lớp cơ sở trừu tượng cung cấp một kế hoạch chi tiết cho các lớp cụ thể.Họ không chứa việc thực hiện.Thay vào đó, họ cung cấp một giao diện và đảm bảo rằng các lớp cụ thể xuất phát được thực hiện đúng.Các lớp cơ sở trừu tượng không thể được khởi tạo.provide a blueprint for concrete classes. They don't contain implementation. Instead, they provide an interface and make sure that derived concrete classes are properly implemented. Abstract base classes cannot be instantiated.

Tại sao chúng ta tuyên bố các phương pháp trừu tượng?

Các phương thức trừu tượng chỉ xác định một hợp đồng mà các lớp dẫn xuất phải thực hiện.Đó là cách bạn đảm bảo rằng họ thực sự luôn luôn như vậy.define a contract that derived classes must implement. It's is the way how you ensure that they actually always will.