Hướng dẫn what is abstract class in python? - lớp trừu tượng trong python là gì?

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

Một lớp trừu tượng là gì?

Một lớp trừu tượng là một lớp được tuyên bố là trừu tượng có thể hoặc không bao gồm các phương thức trừu tượng. Các lớp trừu tượng không thể được khởi tạo, nhưng chúng có thể được phân nhóm. Khi một lớp trừu tượng được phân lớp, lớp con thường cung cấp các triển khai cho tất cả các phương thức trừu tượng trong lớp cha của nó.a class that is declared abstract —it may or may not include abstract methods. Abstract classes cannot be instantiated, but they can be subclassed. When an abstract class is subclassed, the subclass usually provides implementations for all of the abstract methods in its parent class.

Ví dụ về lớp trừu tượng là gì?

Các lớp trừu tượng là điều cần thiết để cung cấp một sự trừu tượng hóa cho mã để làm cho nó có thể tái sử dụng và có thể mở rộng.Ví dụ, một lớp phụ huynh xe với xe tải và xe máy kế thừa từ nó là một sự trừu tượng dễ dàng cho phép thêm nhiều phương tiện.a Vehicle parent class with Truck and Motorbike inheriting from it is an abstraction that easily allows more vehicles to be added.

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

Một lớp trừu tượng được sử dụng nếu bạn muốn cung cấp một chức năng phổ biến, được triển khai trong số tất cả các triển khai của thành phần.Các lớp trừu tượng sẽ cho phép bạn thực hiện một phần lớp của mình, trong khi các giao diện sẽ không có việc triển khai cho bất kỳ thành viên nào.if you want to provide a common, implemented functionality among all the implementations of the component. Abstract classes will allow you to partially implement your class, whereas interfaces would have no implementation for any members whatsoever.

Sự trừu tượng trong Python là gì?

Sự trừu tượng trong Python được định nghĩa là một quá trình xử lý sự phức tạp bằng cách che giấu thông tin không cần thiết từ người dùng.Đây là một trong những khái niệm cốt lõi của các ngôn ngữ lập trình hướng đối tượng [OOP].a process of handling complexity by hiding unnecessary information from the user. This is one of the core concepts of object-oriented programming [OOP] languages.

Bài Viết Liên Quan

Chủ Đề