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

Поділитись

Наследование позволяет создавать новый класс на основе уже существующего класса. Наряду с инкапсуляцией наследование является одним из краеугольных камней объектно-ориентированного дизайна.

Ключевыми понятиями наследования являются подкласс и суперклассПодкласс наследует от суперкласса все публичные атрибуты и методы. Суперкласс еще называется базовым (base class) или родительским (parent class), а подкласс – производным (derived class) или дочерним (child class).

Синтаксис для наследования классов выглядит следующим образом:

1
2
class подкласс (суперкласс):
методы_подкласса

Например, в прошлых темах был создан класс Person, который представляет человека. Предположим, нам необходим класс работника, который работает на некотором предприятии. Мы могли бы создать с нуля новый класс, к примеру, класс Employee. Однако он может иметь те же атрибуты и методы, что и класс Person, так как сотрудник – это человек. Поэтому нет смысла определять в классе Employee тот же функционал, что и в классе Person. И в этом случае лучше применить наследование.

Итак, унаследуем класс Employee от класса Person:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class Person:
def __init__(self, name, age):
self.__name = name 

# устанавливаем имя
self.__age = age 

# устанавливаем возраст
 @propertydef age(self)
return self.__age 
@age.setterdef age(self, age):
if age in range(1, 100):
self.__age = ageelse:
print("Недопустимый возраст") 

@propertydef name(self):
return self.__name 
def display_info(self):
print("Имя:", self.__name, "\tВозраст:", self.__age)
 
 class Employee(Person):
 def details(self, company):

# print(self.__name, "работает в компании", company)
# так нельзя, self.__name - приватный атрибут

print(self.name, "работает в компании", company)  
tom = Employee("Tom", 23)
tom.details("Google")
tom.age = 33tom.display_info()

Класс Employee полностью перенимает функционал класса Person и в дополнении к нему добавляет метод details().

Стоит обратить внимание, что для Employee доступны через ключевое слово self все методы и атрибуты класса Person, кроме закрытых атрибутов типа __name или __age.

При создании объекта Em


Поділитись