<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Inheritance
Inheritance means extending the properties of one class by another. Inheritance implies code reusability, because of which client classes do not need to implement everything from scratch. They can simply refer to their base classes to execute the code.
Unlike Java and C#, like C++, Python allows Multiple inheritance. Name resolution is done by the order in which the base classes are specified.
Syntax
python
    class ClassName(BaseClass1[,BaseClass2,....,BaseClassN])
Step1:  <div class="alert alert-info">
**Note**
Base class can be referred from derived class in two ways
- Base Class name  - `BaseClass.function(self,args)`
- using `super()`  - `super(DerivedClass, self).function(args)`
</div>
Multiple inheritance and Order of Invocation of Methods
Step2:  Note how pass statement is used to leave the class body empty. Otherwise it would have raised a Syntax Error. Since Drived1 and Derived2 are empty, they would have imported the methods from their base classes
Step3:  Now what will be the result of invoking some_method on d1 and d2? ... Does the name clash ocuur? ... Let's see
<ASSISTANT_TASK:>
Python Code:
class Person:
     
    # Constructor
    def __init__(self, name, age):
        self.name = name
        self.age = age
     
    def __str__(self):
        return 'name = {}\nage = {}'.format(self.name,self.age)
 
# Inherited or Sub class 
class Employee(Person):
    
    def __init__(self, name, age, employee_id):
        Person.__init__(self, name, age) # Referring Base class
        # Can also be done by super(Employee, self).__init__(name, age)
        self.employee_id = employee_id
 
    # Overriding implied code reusability
    def __str__(self):
        return Person.__str__(self) + '\nemployee id = {}'.format(self.employee_id)
s = Person('Kiran',18)
print(s)
e = Employee('Ramesh',18,48)
print(e)
Explanation: Inheritance
Inheritance means extending the properties of one class by another. Inheritance implies code reusability, because of which client classes do not need to implement everything from scratch. They can simply refer to their base classes to execute the code.
Unlike Java and C#, like C++, Python allows Multiple inheritance. Name resolution is done by the order in which the base classes are specified.
Syntax
python
    class ClassName(BaseClass1[,BaseClass2,....,BaseClassN]):
        &lt;statement 0&gt;
        &lt;statement 1&gt;
        &lt;statement 2&gt;
        ...
        ...
        ...
        &lt;statement n&gt;
A First Example
End of explanation
class Base1:
    def some_method(self):
        print('Base1')
        
    
class Base2:
    def some_method(self):
        print('Base2')
        
class Derived1(Base1,Base2):
    pass
class Derived2(Base2,Base1):
    pass
Explanation: <div class="alert alert-info">
**Note**
Base class can be referred from derived class in two ways
- Base Class name  - `BaseClass.function(self,args)`
- using `super()`  - `super(DerivedClass, self).function(args)`
</div>
Multiple inheritance and Order of Invocation of Methods
End of explanation
d1 = Derived1()
d2 = Derived2()
Explanation: Note how pass statement is used to leave the class body empty. Otherwise it would have raised a Syntax Error. Since Drived1 and Derived2 are empty, they would have imported the methods from their base classes
End of explanation
d1.some_method()
d2.some_method()
Explanation: Now what will be the result of invoking some_method on d1 and d2? ... Does the name clash ocuur? ... Let's see
End of explanation
<END_TASK>