Hướng dẫn why do we need abstract class python? - tại sao chúng ta cần python lớp trừu tượng?
Câu trả lời của Oddthinking là không sai, nhưng tôi nghĩ rằng nó bỏ lỡ lý do thực tế, thực tế Python có ABC trong một thế giới của việc gõ vịt. Show Các phương pháp trừu tượng là gọn gàng, nhưng theo tôi, chúng không thực sự lấp đầy bất kỳ trường hợp sử dụng nào chưa được bao phủ bởi việc gõ vịt. Sức mạnh thực sự của các lớp cơ sở trừu tượng nằm ở cách chúng cho phép bạn tùy chỉnh hành vi của 0. .Mã nguồn của Python là mẫu mực. Dưới đây là cách 4 được xác định trong thư viện tiêu chuẩn (tại thời điểm viết):
Định nghĩa này của 1 nói rằng bất kỳ lớp nào có thuộc tính 6 đều được coi là một lớp con của container, ngay cả khi nó không phân lớp trực tiếp. Vì vậy, tôi có thể viết cái này:
Nói cách khác, nếu bạn thực hiện giao diện phù hợp, bạn là một lớp con! ABC cung cấp một cách chính thức để xác định các giao diện trong Python, trong khi vẫn đúng với tinh thần gõ vịt. Bên cạnh đó, điều này hoạt động theo cách tôn vinh nguyên tắc đóng cửa. Mô hình đối tượng của Python trông rất giống với hệ thống OO "truyền thống" hơn (theo ý tôi là java*) - chúng tôi có các lớp yer, đối tượng yer, phương pháp yer - nhưng khi bạn gãi bề mặt, bạn sẽ tìm thấy thứ gì đó phong phú hơn và Linh hoạt hơn. Tương tự như vậy, khái niệm của Python về các lớp cơ sở trừu tượng có thể được nhận ra đối với một nhà phát triển Java, nhưng trong thực tế, chúng được dự định cho một mục đích rất khác. Đôi khi tôi thấy mình viết các hàm đa hình có thể hoạt động trên một mục hoặc một bộ sưu tập các mục và tôi thấy 7 dễ đọc hơn nhiều so với 8 hoặc khối 9 tương đương. (Nếu bạn không biết Python, trong số ba người đó sẽ làm cho ý định của mã rõ ràng nhất?)Điều đó nói rằng, tôi thấy rằng tôi hiếm khi cần phải viết ABC của riêng mình và tôi thường khám phá ra sự cần thiết của một thông qua việc tái cấu trúc. Nếu tôi thấy một hàm đa hình tạo ra nhiều kiểm tra thuộc tính hoặc nhiều chức năng thực hiện kiểm tra thuộc tính tương tự, mùi đó cho thấy sự tồn tại của ABC đang chờ được trích xuất. *Không tham gia vào cuộc tranh luận về việc Java có phải là hệ thống OO "truyền thống" ... Phụ lục: Mặc dù một lớp cơ sở trừu tượng có thể ghi đè hành vi của 0, it still doesn't enter the
MRO of the virtual subclass. This is a potential pitfall for clients: not every object for which 2 has the methods defined on 3.
Thật không may, đây là một trong những cái bẫy "không làm điều đó" (trong đó Python có tương đối ít!): Tránh xác định ABC với cả phương pháp 1 và không Abstract. Hơn nữa, bạn nên làm cho định nghĩa của bạn về 1 phù hợp với tập hợp các phương thức trừu tượng mà ABC của bạn xác định. I have 3 sides I have 4 sides I have 5 sides I have 6 sides0 19Why 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 –
Python3I have 3 sides I have 4 sides I have 5 sides I have 6 sides0 43I have 3 sides I have 4 sides I have 5 sides I have 6 sides0 55I have 3 sides I have 4 sides I have 5 sides I have 6 sides2 I have 3 sides I have 4 sides I have 5 sides I have 6 sides3 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; I have 3 sides I have 4 sides I have 5 sides I have 6 sides9 I can walk and run I can crawl I can bark I can roar0 Mã 1: 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; I have 3 sides I have 4 sides I have 5 sides I have 6 sides9 I can walk and run I can crawl I can bark I can roar9 True True0 True True1 True True2 Mã 1: 6 7 8 9I have 3 sides I have 4 sides I have 5 sides I have 6 sides9 I can walk and run I can crawl I can bark I can roar9 True True0 Abstract Base Class subclass3 True True2 I have 3 sides I have 4 sides I have 5 sides I have 6 sides0 I have 3 sides I have 4 sides I have 5 sides I have 6 sides1 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; I have 3 sides I have 4 sides I have 5 sides I have 6 sides9 I can walk and run I can crawl I can bark I can roar9 True True0 Can't instantiate abstract class parent with abstract methods geeks child class5 True True2 Mã 1: 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; I have 3 sides I have 4 sides I have 5 sides I have 6 sides9 I can walk and run I can crawl I can bark I can roar9 True True0 Traceback (most recent call last): File "/home/ffe4267d930f204512b7f501bb1bc489.py", line 19, in c=Animal() TypeError: Can't instantiate abstract class Animal with abstract methods move7 True True2 Mã 1:
6 7 8 9
I have 3 sides I have 4 sides I have 5 sides I have 6 sides0 I have 3 sides I have 4 sides I have 5 sides I have 6 sides1
I have 3 sides I have 4 sides I have 5 sides I have 6 sides2 I have 3 sides I have 4 sides I have 5 sides I have 6 sides5 I have 3 sides I have 4 sides I have 5 sides I have 6 sides6 I have 3 sides I have 4 sides I have 5 sides I have 6 sides7 I have 3 sides I have 4 sides I have 5 sides I have 6 sides8
I have 3 sides I have 4 sides I have 5 sides I have 6 sides I have 3 sides I have 4 sides I have 5 sides I have 6 sides0 True True4 Code 2: Python3I have 3 sides I have 4 sides I have 5 sides I have 6 sides0 43I have 3 sides I have 4 sides I have 5 sides I have 6 sides0 10I have 3 sides I have 4 sides I have 5 sides I have 6 sides2 I have 3 sides I have 4 sides I have 5 sides I have 6 sides5 13I have 3 sides I have 4 sides I have 5 sides I have 6 sides7 I have 3 sides I have 4 sides I have 5 sides I have 6 sides8 I have 3 sides I have 4 sides I have 5 sides I have 6 sides9 I can walk and run I can crawl I can bark I can roar0 I have 3 sides I have 4 sides I have 5 sides I have 6 sides0 19I have 3 sides I have 4 sides I have 5 sides I have 6 sides2 I have 3 sides I have 4 sides I have 5 sides I have 6 sides5 13I have 3 sides I have 4 sides I have 5 sides I have 6 sides7 I have 3 sides I have 4 sides I have 5 sides I have 6 sides8 I have 3 sides I have 4 sides I have 5 sides I have 6 sides9 I can walk and run I can crawl I can bark I can roar9 True True0 28True True2 I have 3 sides I have 4 sides I have 5 sides I have 6 sides0 19I have 3 sides I have 4 sides I have 5 sides I have 6 sides2 I have 3 sides I have 4 sides I have 5 sides I have 6 sides5 13I have 3 sides I have 4 sides I have 5 sides I have 6 sides7 I have 3 sides I have 4 sides I have 5 sides I have 6 sides8 I have 3 sides I have 4 sides I have 5 sides I have 6 sides9 I can walk and run I can crawl I can bark I can roar9 True True0 40True True2 I have 3 sides I have 4 sides I have 5 sides I have 6 sides0 19I have 3 sides I have 4 sides I have 5 sides I have 6 sides2 I have 3 sides I have 4 sides I have 5 sides I have 6 sides5 13I have 3 sides I have 4 sides I have 5 sides I have 6 sides7 I have 3 sides I have 4 sides I have 5 sides I have 6 sides8 I have 3 sides I have 4 sides I have 5 sides I have 6 sides9 I can walk and run I can crawl I can bark I can roar9 True True0 52True True2 I have 3 sides I have 4 sides I have 5 sides I have 6 sides0 19I have 3 sides I have 4 sides I have 5 sides I have 6 sides2 I have 3 sides I have 4 sides I have 5 sides I have 6 sides5 13I have 3 sides I have 4 sides I have 5 sides I have 6 sides7 I have 3 sides I have 4 sides I have 5 sides I have 6 sides8 I have 3 sides I have 4 sides I have 5 sides I have 6 sides9 I can walk and run I can crawl I can bark I can roar9 True True0 64True True2 I have 3 sides I have 4 sides I have 5 sides I have 6 sides0 31 69I have 3 sides I have 4 sides I have 5 sides I have 6 sides0 43 73I have 3 sides I have 4 sides I have 5 sides I have 6 sides0 55 69Mộ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; 73Output: I can walk and run I can crawl I can bark I can roar Mã 1: Python3 6 7 8 9I have 3 sides I have 4 sides I have 5 sides I have 6 sides0 I have 3 sides I have 4 sides I have 5 sides I have 6 sides1 I have 3 sides I have 4 sides I have 5 sides I have 6 sides2 I have 3 sides I have 4 sides I have 5 sides I have 6 sides5 I have 3 sides I have 4 sides I have 5 sides I have 6 sides6 I have 3 sides I have 4 sides I have 5 sides I have 6 sides7 I have 3 sides I have 4 sides I have 5 sides I have 6 sides8 I have 3 sides I have 4 sides I have 5 sides I have 6 sides9 I can walk and run I can crawl I can bark I can roar0 I have 3 sides I have 4 sides I have 5 sides I have 6 sides0 I can walk and run I can crawl I can bark I can roar2 I have 3 sides I have 4 sides I have 5 sides I have 6 sides2 I have 3 sides I have 4 sides I have 5 sides I have 6 sides5 I have 3 sides I have 4 sides I have 5 sides I have 6 sides6 I have 3 sides I have 4 sides I have 5 sides I have 6 sides7 I have 3 sides I have 4 sides I have 5 sides I have 6 sides8 I have 3 sides I have 4 sides I have 5 sides I have 6 sides9 I can walk and run I can crawl I can bark I can roar9 True True0 03True True2 I can walk and run I can crawl I can bark I can roar9 06 0 08I can walk and run I can crawl I can bark I can roar9 06isinstance 12Output: True True Một tác dụng phụ của việc sử dụng phân lớp trực tiếp là, có thể tìm thấy tất cả các triển khai plugin của bạn bằng cách hỏi lớp cơ sở cho danh sách các lớp đã biết có nguồn gốc từ nó. ; Các lớp bê tông chỉ chứa các phương pháp cụ thể (bình thường) trong khi các lớp trừu tượng có thể chứa cả các phương pháp cụ thể và phương pháp trừu tượng. Lớp cụ thể cung cấp việc triển khai các phương thức trừu tượng, lớp cơ sở trừu tượng cũng có thể cung cấp một triển khai bằng cách gọi các phương thức thông qua Super (). & NBSP; & NBSP; Hãy xem qua ví dụ để gọi phương thức bằng Super (): & nbsp; & nbsp; Python3 8 83 6 7 8 9I have 3 sides I have 4 sides I have 5 sides I have 6 sides0 20I have 3 sides I have 4 sides I have 5 sides I have 6 sides2 I have 3 sides I have 4 sides I have 5 sides I have 6 sides5 23I have 3 sides I have 4 sides I have 5 sides I have 6 sides7 I have 3 sides I have 4 sides I have 5 sides I have 6 sides8 I have 3 sides I have 4 sides I have 5 sides I have 6 sides9 I can walk and run I can crawl I can bark I can roar9 True True0 29True True2 I have 3 sides I have 4 sides I have 5 sides I have 6 sides0 32I have 3 sides I have 4 sides I have 5 sides I have 6 sides2 I have 3 sides I have 4 sides I have 5 sides I have 6 sides5 23I have 3 sides I have 4 sides I have 5 sides I have 6 sides7 I have 3 sides I have 4 sides I have 5 sides I have 6 sides8 I have 3 sides I have 4 sides I have 5 sides I have 6 sides9 39 40I have 3 sides I have 4 sides I have 5 sides I have 6 sides9 I can walk and run I can crawl I can bark I can roar9 True True0 44True True2 I have 3 sides I have 4 sides I have 5 sides I have 6 sides0 32 49Output: Abstract Base Class subclass 46isinstance 0 48Abstract Properties : Abstract classes include attributes in addition to methods, you can require the attributes in concrete classes by defining them with @abstractproperty. Python3 8 83 6 7 8 9I have 3 sides I have 4 sides I have 5 sides I have 6 sides0 20I have 3 sides I have 4 sides I have 5 sides I have 6 sides2 59 60I have 3 sides I have 4 sides I have 5 sides I have 6 sides2 I have 3 sides I have 4 sides I have 5 sides I have 6 sides5 23I have 3 sides I have 4 sides I have 5 sides I have 6 sides7 I have 3 sides I have 4 sides I have 5 sides I have 6 sides8 I have 3 sides I have 4 sides I have 5 sides I have 6 sides0 32 46isinstance 0 48I have 3 sides I have 4 sides I have 5 sides I have 6 sides2 72I have 3 sides I have 4 sides I have 5 sides I have 6 sides2 I have 3 sides I have 4 sides I have 5 sides I have 6 sides5 23I have 3 sides I have 4 sides I have 5 sides I have 6 sides7 I have 3 sides I have 4 sides I have 5 sides I have 6 sides8 I have 3 sides I have 4 sides I have 5 sides I have 6 sides0 32 81 82I have 3 sides I have 4 sides I have 5 sides I have 6 sides2 46isinstance 0 86I have 3 sides I have 4 sides I have 5 sides I have 6 sides2 I can walk and run I can crawl I can bark I can roar9 89 46isinstance 0 48Trong 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; I have 3 sides I have 4 sides I have 5 sides I have 6 sides0 57I have 3 sides I have 4 sides I have 5 sides I have 6 sides2 I have 3 sides I have 4 sides I have 5 sides I have 6 sides5 88I have 3 sides I have 4 sides I have 5 sides I have 6 sides7 I have 3 sides I have 4 sides I have 5 sides I have 6 sides8 Output: Can't instantiate abstract class parent with abstract methods geeks child class I have 3 sides I have 4 sides I have 5 sides I have 6 sides9 67 68Abstract 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. Python3I have 3 sides I have 4 sides I have 5 sides I have 6 sides0 94I have 3 sides I have 4 sides I have 5 sides I have 6 sides9 67 03I have 3 sides I have 4 sides I have 5 sides I have 6 sides2 I have 3 sides I have 4 sides I have 5 sides I have 6 sides3 90 91I have 3 sides I have 4 sides I have 5 sides I have 6 sides9 I can walk and run I can crawl I can bark I can roar0 I have 3 sides I have 4 sides I have 5 sides I have 6 sides2 I can walk and run I can crawl I can bark I can roar9 94 90 91I have 3 sides I have 4 sides I have 5 sides I have 6 sides9 I can walk and run I can crawl I can bark I can roar9 True True0 28True True2 I have 3 sides I have 4 sides I have 5 sides I have 6 sides2 I can walk and run I can crawl I can bark I can roar9 94 90 91I have 3 sides I have 4 sides I have 5 sides I have 6 sides9 I can walk and run I can crawl I can bark I can roar9 True True0 40True True2 I have 3 sides I have 4 sides I have 5 sides I have 6 sides2 I can walk and run I can crawl I can bark I can roar9 94 90 91I have 3 sides I have 4 sides I have 5 sides I have 6 sides9 I can walk and run I can crawl I can bark I can roar9 True True0 52True True2 I have 3 sides I have 4 sides I have 5 sides I have 6 sides2 I can walk and run I can crawl I can bark I can roar9 94 90 91I have 3 sides I have 4 sides I have 5 sides I have 6 sides9 I can walk and run I can crawl I can bark I can roar9 True True0 64True True2 I have 3 sides I have 4 sides I have 5 sides I have 6 sides63 isinstance 0I have 3 sides I have 4 sides I have 5 sides I have 6 sides65 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 |