> For the complete documentation index, see [llms.txt](https://docs.arkannis.net/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.arkannis.net/programming/courses/python-pcap-31-03-course/modules-packages-and-oop/abstract-classes-and-methods.md).

# Abstract Classes and Methods

## Abstract class:

* It's only meant to be inherited from
* You should not be creating instances from this

```python
class Animal:
	def __init__(self, name):
		self.animal_name = name
		
	def eat(self):
		# raise is used to throw error
		raise NotImplementedError("Child class should be implementing this")
		
class Monkey(Animal):
	def eat(self):
		print("Monkey eating bananas...")
		
class Bird(Animal):
	def eat(self):
		print("Bird eating seeds...")
		
	def fly(self):
		print("Bird soaring high...")
		
my_monkey = Monkey("jojo")
my_monkey() # Will print monkey eating bananas
```

* You get the base functionality from the main function (Animal)
* You define the rest of the functionality in other classes like Monkey or Bird
