Инструменты пользователя

Инструменты сайта


python:oop:nasledovanie

Наследование

Наследование подразумевает то, что дочерний класс содержит все атрибуты родительского класса, при этом некоторые из них могут быть переопределены или добавлены в дочернем. Например, мы можем создать свой класс, 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 лет
компания Дима
python/oop/nasledovanie.txt · Последние изменения: 2023/01/12 12:18 (внешнее изменение)