Как сделать класс наследник python
В этой статье мы рассмотрим пошаговый процесс создания класса-наследника на языке Python с примером использования. Узнаем, как переопределить родительские атрибуты, методы и другие возможности.
Наследование - одна из базовых основ ООП. Python поддерживает два вида наследования: явное и неявное. Наследование позволяет создавать классы-наследники, которые имеют доступ ко всем переменным и функциям класса-родителя, а также добавляют к ним свои собственные методы и переменные.
Наследование в Python происходит с помощью ключевого слова class
в объявлении подкласса, и при этом класс-родитель указывается в скобках после имени подкласса. Например:
class SubclassName (ParentClassName):
'''docstring'''
#statement-1
#statement-2
#.....
Объявление подкласса имеет следующее выражение:
class SubclassName (ParentClassName1, ParentClassName2, ...):
'''docstring'''
#statement-1
#statement-2
#.....
В этом примере SubclassName
- это имя подкласса, а ParentClassName1, ParentClassName2, ...
- это имена классов-родителей. Таким образом, подкласс будет наследовать методы и атрибуты от классов-родителей. Также такое наследование называется множественным наследованием. В противном случае наследование называется простым наследованием.
Наследование позволяет подклассу использовать методы и атрибуты родительского класса, а также добавить к ним некоторые свои методы и атрибуты. Например, в классе-родителе может быть метод get_name()
, и в подклассе мы можем переопределить его, так, чтобы он возвращал имя пользователя вместо его имени. Например:
class ParentClass:
def get_name(self):
return self.name
class SubClass(ParentClass):
def get_name(self):
return self.user_name
p = ParentClass()
p.name = 'John Doe'
print(p.get_name()) # John Doe
s = SubClass()
s.user_name = 'Jane Doe'
print(s.get_name()) # Jane Doe
Кроме того, подклассы могут расширять класс-родитель, добавляя к нему новые методы. Например:
class ParentClass:
def get_name(self):
return self.name
class SubClass(ParentClass):
def get_name(self):
return self.user_name
def get_age(self):
return self.age
p = ParentClass()
p.name = 'John Doe'
print(p.get_name()) # John Doe
s = SubClass()
s.user_name = 'Jane Doe'
s.age = 20
print(s.get_name()) # Jane Doe
print(s.get_age()) # 20
Python поддерживает также неявное наследование, о котором мы будем говорить далее.
Неявное наследование
Неявное наследование позволяет подклассу наследовать методы и атрибуты не только от класса-родителя, но и от всех классов в иерархии наследования. Другими словами, подкласс наследует методы и атрибуты не только от родительского класса, но и от всех его предков. Например:
class GrandParentClass:
def get_name(self):
return self.name
class ParentClass(GrandParentClass):
def get_age(self):
return self.age
class SubClass(ParentClass):
def get_user_name(self):
return self.user_name
g = GrandParentClass()
g.name = 'John Doe'
print(g.get_name()) # John Doe
p = ParentClass()
p.age = 20
print(p.get_age()) # 20
s = SubClass()
s.user_name = 'Jane Doe'
print(s.get_user_name()) # Jane Doe
print(s.get_name()) # John Doe
В этом примере подкласс SubClass
наследует метод get_name()
от класса-предка GrandParentClass
, даже не привязываясь напрямую к нему.
Поэтому наследование - очень мощное и полезное средство ООП, которое позволяет создавать более сложные классы с минимальным количеством кода.