Day 21: Inheritence

This is a project I designed for inheritence.  

Great Grand Father
Grand Father
Father
Child

class Greatgrandparent:
def __init__(self, name):
self.greatgrandparent_name = name

def greet_greatgrandparent(self):
print(f"Hello from GreatGrandparent {self.greatgrandparent_name}")


class Grandparent(Greatgrandparent):
def __init__(self, name, greatgrandparent_name):
super().__init__(greatgrandparent_name)
self.grandparent_name = name

def greet_grandparent(self):
print(f"Hello from Grandparent {self.grandparent_name}")

class Parent(Grandparent):
def __init__(self, name, grandparent_name, greatgrandparent_name):
super().__init__(grandparent_name, greatgrandparent_name) # Initialize the Grandparent part
self.parent_name = name

def greet_parent(self):
print(f"Hello from Parent {self.parent_name}")

class Child(Parent):
def __init__(self, name, parent_name, grandparent_name, greatgrandparent_name):
super().__init__(parent_name, grandparent_name, greatgrandparent_name) # Initialize the Parent part
self.child_name = name

def greet_child(self):
print(f"Hello from Child {self.child_name}")


# Create an instance of the Child class
my_child = Child("John IV", "John III", "John II", "John")

# Access methods from all levels of the hierarchy
my_child.greet_greatgrandparent()
my_child.greet_grandparent()
my_child.greet_parent()
my_child.greet_child()
print()
# Access attributes from all levels
print(f"GreatGrandparent's name: {my_child.greatgrandparent_name}")
print(f"Grandparent's name: {my_child.grandparent_name}")
print(f"Parent's name: {my_child.parent_name}")
print(f"Child's name: {my_child.child_name}")

Hello from GreatGrandparent John
Hello from Grandparent John II
Hello from Parent John III
Hello from Child John IV

GreatGrandparent's name: John
Grandparent's name: John II
Parent's name: John III
Child's name: John IV

Process finished with exit code 0