====Наследование====
Наследование подразумевает то, что дочерний класс содержит все атрибуты родительского класса, при этом некоторые из них могут быть переопределены или добавлены в дочернем. Например, мы можем создать свой класс, Person:
app/lessonImport40/Person.py
class Person:
def __init__(self, name = 'Серега'):
self.name = name
self.__age = 20 # инкапсуляция типа private
def printInfo(self):
print(f'Зовут {self.name} ему {self.__age} лет')
@property
def age(self):
'''
Декоратор
:param age: передаваемый папраметр
'''
return self.__age
@age.setter
def age(self, value):
'''
Декоратор
:param value: передаваемый папраметр
'''
self.__age = value
Создадим класс наследни Employee, в него передадим класс **class Employee(Person):** , класс Employee унаследует все методы класса Person. По умолчанию в классе наследнике Employee вызывается родительский конструктор, если внутри Employee создать свой конструктор то он переопределит родительский, что бы этого избежать необходимо родительский конструктор вызвать явно **Person.__init__(self, name)**.
app/lessonImport40/Employee.py
from app.lessonImport40.Person import Person
class Employee(Person):
def __init__(self, company = 'Картотека',name = 'Ира'):
Person.__init__(self, name)
self.__company = company
@property
def company(self):
'''
Декоратор
:param age: передаваемый папраметр
'''
return self.__company
@company.setter
def company(self, value):
'''
Декоратор
:param value: передаваемый папраметр
'''
self.__company = value
def infoEmployee(self):
print(f'компания {self.__company}')
Все методы и свойста класс Person, кроме закрытых (**self.__age**), можно вызвать через экземпляр класса Employee
from app.lessonImport40.Employee import Employee
employee = Employee()
employee.age = 25
employee.printInfo()
employee.infoEmployee()
print('---------------------------')
employee2 = Employee('Дима', 28)
employee2.printInfo()
employee2.infoEmployee()
Вывод результата
Зовут Ира ему 25 лет
компания Картотека
---------------------------
Зовут 28 ему 20 лет
компания Дима