Làm thế nào để bạn tạo một phương thức trừu tượng trong ví dụ về python?

Một lớp được gọi là lớp Trừu tượng nếu nó chứa một hoặc nhiều phương thức trừu tượng. Một phương thức trừu tượng là một phương thức được khai báo, nhưng không chứa phần thực thi. Các lớp trừu tượng có thể không được khởi tạo và các phương thức trừu tượng của nó phải được thực hiện bởi các lớp con của nó

Các lớp cơ sở trừu tượng cung cấp một cách để xác định các giao diện khi các kỹ thuật khác như hasattr[] sẽ vụng về hoặc sai một cách tinh vi [ví dụ như với các phương thức ma thuật]. ABC giới thiệu các lớp con ảo, là các lớp không kế thừa từ một lớp nhưng vẫn được nhận dạng bởi các hàm isinstance[] và issubclass[]. Có nhiều ABC tích hợp sẵn trong Python. ABC cho các cấu trúc dữ liệu như Iterator, Generator, Set, mapping, v.v. được xác định trong các bộ sưu tập. mô-đun abc. Mô-đun số xác định tháp số là tập hợp các lớp cơ sở cho các kiểu dữ liệu số. Mô-đun 'abc' trong thư viện Python cung cấp cơ sở hạ tầng để xác định các lớp cơ sở trừu tượng tùy chỉnh

'abc' hoạt động bằng cách đánh dấu các phương thức của lớp cơ sở là trừu tượng. Điều này được thực hiện bởi người trang trí @absttractmethod. Một lớp cụ thể là một lớp con của lớp cơ sở trừu tượng như vậy sau đó thực hiện cơ sở trừu tượng bằng cách ghi đè các phương thức trừu tượng của nó

Mô-đun abc định nghĩa lớp ABCMeta là siêu dữ liệu để xác định lớp cơ sở trừu tượng. Ví dụ sau định nghĩa lớp Shape là một lớp cơ sở trừu tượng sử dụng ABCMeta. Lớp hình dạng có phương thức area[] được trang trí bằng phương pháp trừu tượng

Một lớp Hình chữ nhật hiện sử dụng lớp Hình dạng bên trên làm lớp cha của nó và triển khai phương thức vùng trừu tượng []. Vì nó là một lớp cụ thể, nó có thể được khởi tạo và phương thức area[] được triển khai có thể được gọi

import abc
class Shape[metaclass=abc.ABCMeta]:
   @abc.abstractmethod
   def area[self]:
      pass
class Rectangle[Shape]:
   def __init__[self, x,y]:
      self.l = x
      self.b=y
   def area[self]:
      return self.l*self.b
r = Rectangle[10,20]
print ['area: ',r.area[]]

Lưu ý rằng lớp cơ sở trừu tượng có thể có nhiều hơn một phương thức trừu tượng. Lớp con phải triển khai tất cả chúng nếu không thành công TypeError sẽ được nâng lên

mô-đun abc cũng định nghĩa lớp trình trợ giúp ABC có thể được sử dụng thay cho lớp ABCMeta trong định nghĩa của lớp cơ sở trừu tượng

class Shape[abc.ABC]:
   @abc.abstractmethod
   def area[self]:
      pass

Thay vì phân lớp từ lớp cơ sở trừu tượng, nó có thể được đăng ký dưới dạng cơ sở trừu tượng bởi trình trang trí lớp đăng ký

class Shape[abc.ABC]:
   @abc.abstractmethod
   def area[self]:
      pass
@Shape.register
class Rectangle[]:
   def __init__[self, x,y]:
   self.l = x
   self.b=y
   def area[self]:
      return self.l*self.b

Bạn cũng có thể cung cấp các phương thức lớp và phương thức tĩnh trong lớp cơ sở trừu tượng bằng các trình trang trí @abstractclassmethod và @abstractstatic method decorators tương ứng

Tóm lược. trong hướng dẫn này, bạn sẽ tìm hiểu về các lớp Trừu tượng trong Python và cách sử dụng nó để tạo bản thiết kế cho các lớp khác

Giới thiệu về các lớp trừu tượng Python

Trong lập trình hướng đối tượng, lớp trừu tượng là lớp không thể khởi tạo. Tuy nhiên, bạn có thể tạo các lớp kế thừa từ một lớp trừu tượng

Thông thường, bạn sử dụng một lớp trừu tượng để tạo bản thiết kế cho các lớp khác

Tương tự, một phương thức trừu tượng là một phương thức không có triển khai. Một lớp trừu tượng có thể có hoặc không bao gồm các phương thức trừu tượng

Python không hỗ trợ trực tiếp các lớp trừu tượng. Nhưng nó cung cấp một mô-đun cho phép bạn định nghĩa các lớp trừu tượng

Để định nghĩa một lớp trừu tượng, bạn sử dụng mô-đun

from abc import ABC class AbstractClassName[ABC]: pass

Code language: Python [python]
7 [lớp cơ sở trừu tượng]

Mô-đun

from abc import ABC class AbstractClassName[ABC]: pass

Code language: Python [python]
7 cung cấp cho bạn cơ sở hạ tầng để xác định các lớp cơ sở trừu tượng

Ví dụ

from abc import ABC class AbstractClassName[ABC]: pass

Code language: Python [python]

Để xác định một phương thức trừu tượng, bạn sử dụng trình trang trí

from abc import ABC, abstractmethod class AbstractClassName[ABC]: @abstractmethod def abstract_method_name[self]: pass

Code language: Python [python]
0

from abc import ABC, abstractmethod class AbstractClassName[ABC]: @abstractmethod def abstract_method_name[self]: pass

Code language: Python [python]

Ví dụ lớp trừu tượng Python

Giả sử rằng bạn cần phát triển một chương trình trả lương cho một công ty

Công ty có hai nhóm nhân viên. nhân viên toàn thời gian và nhân viên theo giờ. Các nhân viên toàn thời gian nhận được một mức lương cố định trong khi các nhân viên theo giờ được trả lương theo giờ cho các dịch vụ của họ

Chương trình tính lương cần in ra bảng lương bao gồm tên nhân viên và mức lương hàng tháng của họ

Để lập mô hình chương trình tính lương theo cách hướng đối tượng, bạn có thể sử dụng các lớp sau.

from abc import ABC, abstractmethod class AbstractClassName[ABC]: @abstractmethod def abstract_method_name[self]: pass

Code language: Python [python]
1,

from abc import ABC, abstractmethod class AbstractClassName[ABC]: @abstractmethod def abstract_method_name[self]: pass

Code language: Python [python]
2,

from abc import ABC, abstractmethod class AbstractClassName[ABC]: @abstractmethod def abstract_method_name[self]: pass

Code language: Python [python]
3 và

from abc import ABC, abstractmethod class AbstractClassName[ABC]: @abstractmethod def abstract_method_name[self]: pass

Code language: Python [python]
4

Để cấu trúc chương trình, chúng tôi sẽ sử dụng các mô-đun, trong đó mỗi lớp được đặt trong một mô-đun [hoặc tệp] riêng biệt

Lớp nhân viên

Lớp

from abc import ABC, abstractmethod class AbstractClassName[ABC]: @abstractmethod def abstract_method_name[self]: pass

Code language: Python [python]
1 đại diện cho một nhân viên, toàn thời gian hoặc theo giờ. Lớp

from abc import ABC, abstractmethod class AbstractClassName[ABC]: @abstractmethod def abstract_method_name[self]: pass

Code language: Python [python]
1 phải là lớp trừu tượng vì chỉ có nhân viên toàn thời gian và nhân viên theo giờ, không tồn tại nhân viên chung

Lớp

from abc import ABC, abstractmethod class AbstractClassName[ABC]: @abstractmethod def abstract_method_name[self]: pass

Code language: Python [python]
1 nên có một thuộc tính trả về tên đầy đủ của một nhân viên. Ngoài ra, nên có một phương pháp tính lương. Phương pháp tính lương phải là một phương pháp trừu tượng

Sau đây định nghĩa lớp trừu tượng

from abc import ABC, abstractmethod class AbstractClassName[ABC]: @abstractmethod def abstract_method_name[self]: pass

Code language: Python [python]
1

class Shape[abc.ABC]:
   @abc.abstractmethod
   def area[self]:
      pass
4

Lớp nhân viên toàn thời gian

Lớp

from abc import ABC, abstractmethod class AbstractClassName[ABC]: @abstractmethod def abstract_method_name[self]: pass

Code language: Python [python]
2 kế thừa từ lớp

from abc import ABC, abstractmethod class AbstractClassName[ABC]: @abstractmethod def abstract_method_name[self]: pass

Code language: Python [python]
1. Nó sẽ cung cấp triển khai cho phương thức
class Shape[abc.ABC]:
   @abc.abstractmethod
   def area[self]:
      pass
41

Vì nhân viên toàn thời gian nhận được mức lương cố định, bạn có thể khởi tạo mức lương trong hàm tạo của lớp

Sau đây minh họa lớp

from abc import ABC, abstractmethod class AbstractClassName[ABC]: @abstractmethod def abstract_method_name[self]: pass

Code language: Python [python]
2

class Shape[abc.ABC]:
   @abc.abstractmethod
   def area[self]:
      pass
9

Lớp HourlyEmployee

from abc import ABC, abstractmethod class AbstractClassName[ABC]: @abstractmethod def abstract_method_name[self]: pass

Code language: Python [python]
3 cũng kế thừa từ lớp

from abc import ABC, abstractmethod class AbstractClassName[ABC]: @abstractmethod def abstract_method_name[self]: pass

Code language: Python [python]
1. Tuy nhiên, nhân viên hàng giờ được trả theo giờ làm việc và tỷ lệ của họ. Do đó, bạn có thể khởi tạo thông tin này trong hàm tạo của lớp

Để tính lương cho nhân viên theo giờ, bạn nhân số giờ làm việc và tỷ lệ

Sau đây cho thấy lớp

from abc import ABC, abstractmethod class AbstractClassName[ABC]: @abstractmethod def abstract_method_name[self]: pass

Code language: Python [python]
3

class Shape[abc.ABC]:
   @abc.abstractmethod
   def area[self]:
      pass
@Shape.register
class Rectangle[]:
   def __init__[self, x,y]:
   self.l = x
   self.b=y
   def area[self]:
      return self.l*self.b
3

Lớp tiền lương

Lớp

from abc import ABC, abstractmethod class AbstractClassName[ABC]: @abstractmethod def abstract_method_name[self]: pass

Code language: Python [python]
4 sẽ có phương thức thêm một nhân viên vào danh sách nhân viên và in ra bảng lương

Vì nhân viên toàn thời gian và nhân viên làm việc theo giờ có chung giao diện [thuộc tính ______147 và phương pháp ____141]. Do đó, lớp Bảng lương không cần phân biệt

Sau đây cho thấy lớp

from abc import ABC, abstractmethod class AbstractClassName[ABC]: @abstractmethod def abstract_method_name[self]: pass

Code language: Python [python]
4

class Shape[abc.ABC]:
   @abc.abstractmethod
   def area[self]:
      pass
@Shape.register
class Rectangle[]:
   def __init__[self, x,y]:
   self.l = x
   self.b=y
   def area[self]:
      return self.l*self.b
8

chương trình chính

class Shape[abc.ABC]:
   @abc.abstractmethod
   def area[self]:
      pass
90 sau đây sử dụng các lớp

from abc import ABC, abstractmethod class AbstractClassName[ABC]: @abstractmethod def abstract_method_name[self]: pass

Code language: Python [python]
2,

from abc import ABC, abstractmethod class AbstractClassName[ABC]: @abstractmethod def abstract_method_name[self]: pass

Code language: Python [python]
3 và

from abc import ABC, abstractmethod class AbstractClassName[ABC]: @abstractmethod def abstract_method_name[self]: pass

Code language: Python [python]
4 để in bảng lương của năm nhân viên

from abc import ABC class AbstractClassName[ABC]: pass

Code language: Python [python]
3

đầu ra

from abc import ABC class AbstractClassName[ABC]: pass

Code language: Python [python]
4

Khi nào nên sử dụng các lớp trừu tượng

Trong thực tế, bạn sử dụng các lớp trừu tượng để chia sẻ mã giữa một số lớp liên quan chặt chẽ. Trong chương trình trả lương, tất cả các phân lớp của lớp

from abc import ABC, abstractmethod class AbstractClassName[ABC]: @abstractmethod def abstract_method_name[self]: pass

Code language: Python [python]
1 đều có chung thuộc tính
class Shape[abc.ABC]:
   @abc.abstractmethod
   def area[self]:
      pass
95

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

Chúng tôi sử dụng cùng một từ khóa trừu tượng để tạo các phương thức trừu tượng. Ví dụ: hiển thị khoảng trống trừu tượng[] ; .

Trừu tượng trong Python với ví dụ là gì?

Hãy lấy một ví dụ khác - Khi chúng tôi sử dụng điều khiển TV để tăng âm lượng . Chúng tôi không biết cách nhấn phím tăng âm lượng của TV. Chúng tôi chỉ biết nhấn nút "+" để tăng âm lượng. Đó chính xác là sự trừu tượng hoạt động trong khái niệm hướng đối tượng.

Phương thức trừu tượng hoạt động như thế nào trong Python?

Một phương thức trừu tượng là một phương thức được khai báo nhưng không chứa phần triển khai . Các lớp trừu tượng không thể được khởi tạo và yêu cầu các lớp con cung cấp các triển khai cho các phương thức trừu tượng.

Làm thế nào là một phương pháp trừu tượng được tạo ra?

Để khai báo một phương thức trừu tượng, hãy sử dụng biểu mẫu chung này. tên phương thức kiểu trừu tượng[danh sách tham số]; Như bạn có thể thấy, không có thân phương thức nào xuất hiện. Bất kỳ lớp bê tông nào [i. e. lớp không có từ khóa trừu tượng] mở rộng một lớp trừu tượng phải ghi đè tất cả các phương thức trừu tượng của lớp.

Chủ Đề