Hướng dẫn can abstract method have body in python - phương thức trừu tượng có thể có phần thân trong python

Tôi có một lớp trừu tượng,

class Model(metaclass=ABCMeta):
    @abstractmethod
    def foo(self):
        pass
6, với một vài phương pháp trừu tượng, tôi nên đặt gì vào cơ thể của các phương pháp?

  1. Sự trở về, sự trở lại

    class Model(metaclass=ABCMeta):
        @abstractmethod
        def foo(self):
            return
    
  2. Một đường chuyền

    class Model(metaclass=ABCMeta):
        @abstractmethod
        def foo(self):
            pass
    
  3. Tăng một lỗi mô tả

    class Model(metaclass=ABCMeta):
        @abstractmethod
        def foo(self):
            raise NotImplementedError("Class {class_name} doesn't implement {func_name} function"
                                  .format(class_name=self.__class__.__name__, func_name=self.foo.__name__))
    

Thông thường tôi sẽ thực hiện Phương pháp 3 và gây ra lỗi, tuy nhiên có vẻ như nó sẽ dư thừa, vì Python gây ra lỗi cho tôi:

>>> bar = module.Model()
Traceback (most recent call last):
  File "", line 1, in 
TypeError: Can't instantiate abstract class Model with abstract methods foo

Giữa các tùy chọn được trình bày, cách thực hành tốt nhất? Hay là có cách khác tôi nên xử lý việc này?

Chúng ta có thể ghi đè phương thức trừu tượng trong Python không?

Một lớp có metaclass có nguồn gốc từ ABCMeta không thể được khởi tạo trừ khi tất cả các phương thức và thuộc tính trừu tượng của nó được ghi đè. Các phương thức trừu tượng có thể được gọi bằng cách sử dụng bất kỳ cơ chế cuộc gọi 'siêu' nào bình thường. Tóm tắtMethod () có thể được sử dụng để khai báo các phương thức trừu tượng cho các thuộc tính và mô tả.

  1. Một lớp trừu tượng là một lớp chứa một hoặc nhiều phương thức trừu tượng. Một phương pháp trừu tượng là một phương pháp thường không có bất kỳ triển khai nào, nó được để lại cho các lớp phụ để cung cấp triển khai cho các phương thức trừu tượng. Ở đây lưu ý rằng trong Python, phương pháp trừu tượng cũng có thể thực hiện trong lớp trừu tượng nhưng lớp phụ thừa hưởng lớp trừu tượng đó vẫn bị buộc phải ghi đè các phương thức trừu tượng.
  2. Mục lục
  3. Lớp học trừu tượng trong Python
  4. Phương pháp trừu tượng trong Python
  5. Những điểm quan trọng về lớp trừu tượng trong Python
  6. Ví dụ về lớp học trừu tượng Python
  7. Lớp học trừu tượng khởi tạo ở Pyhton


Một lớp trừu tượng là một lớp chứa một hoặc nhiều phương thức trừu tượng. Một phương pháp trừu tượng là một phương pháp thường không có bất kỳ triển khai nào, nó được để lại cho các lớp phụ để cung cấp triển khai cho các phương thức trừu tượng. Ở đây lưu ý rằng trong Python, phương pháp trừu tượng cũng có thể thực hiện trong lớp trừu tượng nhưng lớp phụ thừa hưởng lớp trừu tượng đó vẫn bị buộc phải ghi đè các phương thức trừu tượng.

Mục lục

Lớp học trừu tượng trong Python

from abc import ABC
Class MyClass(ABC):

Phương pháp trừu tượng trong Python

Mục lục

Lớp học trừu tượng trong Python

Phương pháp trừu tượng trong Python

from abc import ABC, abstractmethod
Class MyClass(ABC):
 @abstractmethod
 def mymethod(self):
  #empty body
  pass

Lớp học trừu tượng trong Python

  1. Phương pháp trừu tượng trong Python
  2. Những điểm quan trọng về lớp trừu tượng trong Python
  3. Ví dụ về lớp học trừu tượng Python
  4. Lớp trừu tượng Python với phương pháp trừu tượng được triển khai
  5. Không thực hiện tất cả các phương pháp trừu tượng

Phương pháp trừu tượng trong Python

Những điểm quan trọng về lớp trừu tượng trong Pythoncommon and an abstract method vary. Two sub classes Child1 and Child2 inherit the abstract class Parent and implement the abstract method vary.

from abc import ABC, abstractmethod
class Parent(ABC):
  #common functionality
  def common(self):
    print('In common method of Parent')
  @abstractmethod
  def vary(self):
    pass

class Child1(Parent):
  def vary(self):
    print('In vary method of Child1')

class Child2(Parent):
  def vary(self):
    print('In vary method of Child2')

# object of Child1 class
obj = Child1()
obj.common()
obj.vary()
# object of Child2 class
obj = Child2()
obj.common()
obj.vary()

Đầu ra

In common method of Parent
In vary method of Child1
In common method of Parent
In vary method of Child2

Như bạn có thể thấy khi phương thức phổ biến được gọi là phương thức phổ biến () của cha mẹ được gọi. Khi phương thức khác nhau được gọi, phương thức được xác định trong lớp con được gọi.

Lớp trừu tượng Python với phương pháp trừu tượng được triển khai

Ngay cả khi bạn cung cấp việc thực hiện phương pháp trừu tượng trong lớp phụ Lớp trừu tượng vẫn bị buộc phải thực hiện phương pháp trừu tượng.

from abc import ABC, abstractmethod
class Parent(ABC):
  #common functionality
  def common(self):
    print('In common method of Parent')
  @abstractmethod
  def vary(self):
    print('In vary method of Parent')

class Child(Parent):
  pass

# object of Child1 class
obj = Child()
obj.common()
obj.vary()

Đầu ra

Traceback (most recent call last):
  File "F:/NETJS/NetJS_2017/Python/Test/Parent.py", line 18, in 
    obj = Child()
TypeError: Can't instantiate abstract class Child with abstract methods vary

Nếu bạn thực hiện phương thức Vary () trong lớp con thì nó hoạt động tốt.

class Model(metaclass=ABCMeta):
    @abstractmethod
    def foo(self):
        pass
0

Đầu ra

class Model(metaclass=ABCMeta):
    @abstractmethod
    def foo(self):
        pass
1

Không thực hiện tất cả các phương pháp trừu tượng

Nếu lớp con không thực hiện tất cả các phương thức trừu tượng được xác định trong lớp trừu tượng được kế thừa cũng dẫn đến lỗi.

class Model(metaclass=ABCMeta):
    @abstractmethod
    def foo(self):
        pass
2

Đầu ra

class Model(metaclass=ABCMeta):
    @abstractmethod
    def foo(self):
        pass
3

Lớp học trừu tượng khởi tạo ở Pyhton

Vì lớp trừu tượng được cho là có các phương pháp trừu tượng không có cơ thể nên các lớp trừu tượng không được coi là các lớp cụ thể hoàn chỉnh, do đó không thể khởi tạo một lớp trừu tượng.

class Model(metaclass=ABCMeta):
    @abstractmethod
    def foo(self):
        pass
4

Đầu ra

class Model(metaclass=ABCMeta):
    @abstractmethod
    def foo(self):
        pass
5

Đó là tất cả cho chủ đề này lớp trừu tượng trong Python. Nếu bạn có bất kỳ nghi ngờ hoặc bất kỳ đề xuất nào để đưa ra xin vui lòng bỏ bình luận. Cảm ơn!Abstract Class in Python. If you have any doubt or any suggestions to make please drop a comment. Thanks!


Chủ đề liên quan

  1. Giao diện trong Python
  2. Phương pháp quá tải trong Python
  3. Thừa kế trong Python
  4. Trừu tượng hóa trong Python
  5. Phương thức Python String isDigit ()

Bạn cũng có thể thích-

  1. Hàm tạo trong chức năng Python - __init __ ()
  2. Chiều dài chuỗi trong hàm Python - Len ()
  3. Nâng cao tuyên bố trong xử lý ngoại lệ Python
  4. Đối số mặc định trong Python
  5. Java Semaphore với các ví dụ
  6. Đảo ngược từng từ trong chương trình Java chuỗi
  7. Phạm vi đậu vào mùa xuân với các ví dụ
  8. Định dạng tệp trong Hadoop

Phương pháp trừu tượng có cơ thể trong Python không?

Một phương pháp trừu tượng không có cơ thể. (Nó không có tuyên bố.). (It has no statements.)

Lớp trừu tượng có thể có init trong Python không?

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 triển khai cho các phương thức trừu tượng.Nếu chúng ta bắt đầu chương trình này, chúng ta thấy rằng đây không phải là một lớp trừu tượng, bởi vì: chúng ta có thể khởi tạo một thể hiện từ., and require subclasses to provide implementations for the abstract methods. If we start this program, we see that this is not an abstract class, because: we can instantiate an instance from.

Lớp trừu tượng có thể có thuộc tính Python?

Lớp trừu tượng trong Python cũng cung cấp chức năng của các thuộc tính trừu tượng ngoài các phương pháp trừu tượng.Thuộc tính là cách sử dụng pythonic để sử dụng getters và setters.Mô -đun ABC có bộ trang trí @abstractproperty để sử dụng các thuộc tính trừu tượng.. Properties are Pythonic ways of using getters and setters. The abc module has a @abstractproperty decorator to use abstract properties.

Chúng ta có thể ghi đè phương thức trừu tượng trong Python không?

Một lớp có metaclass có nguồn gốc từ ABCMeta không thể được khởi tạo trừ khi tất cả các phương thức và thuộc tính trừu tượng của nó được ghi đè.Các phương thức trừu tượng có thể được gọi bằng cách sử dụng bất kỳ cơ chế cuộc gọi 'siêu' nào bình thường.Tóm tắtMethod () có thể được sử dụng để khai báo các phương thức trừu tượng cho các thuộc tính và mô tả.. The abstract methods can be called using any of the normal 'super' call mechanisms. abstractmethod() may be used to declare abstract methods for properties and descriptors.