Лекция про наследование инкапсуляцию и полиморфизм
python
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
pass
class Dog(Animal):
def speak(self):
return "Woof!"
class Cat(Animal):
def speak(self):
return "Meow!"
dog = Dog("Buddy")
cat = Cat("Fluffy")
print(dog.speak()) # Выведет "Woof!"
print(cat.speak()) # Выведет "Meow!"
В этом примере классы `Dog` и `Cat` наследуют свойство `name` и метод `speak` от класса `Animal`. Класс `Animal` является родительским классом для классов `Dog` и `Cat`. Класс `Dog` имеет специфичное поведение функции `speak`, в то время как класс `Cat` имеет свое уникальное поведение функции `speak`. Это классический пример наследования.
Инкапсуляция представляет собой концепцию, при которой данные и методы, связанные с определенным объектом, объединяются в классе и скрыты от других классов или объектов. Это достигается путем определения приватных и защищенных атрибутов и методов. Приватные атрибуты и методы могут быть доступны только внутри класса, в то время как защищенные атрибуты и методы могут быть доступны внутри класса и в классах-наследниках.
Пример:
python
class Car:
def __init__(self, make, model):
self.make = make # Публичный атрибут
self.__model = model # Приватный атрибут
def get_model(self):
return self.__model
my_car = Car("Toyota", "Camry")
print(my_car.make) # Выведет "Toyota"
print(my_car.__model) # Вызовет ошибку, так как __model является приватным атрибутом
print(my_car.get_model()) # Выведет "Camry"
В этом примере атрибут `make` является публичным и может быть доступен за пределами класса. Атрибут `__model` является приватным и может быть доступен только внутри класса. Вместо прямого доступа к приватному атрибуту мы можем использовать публичный метод `get_model`, который возвращает значение приватного атрибута.
Полиморфизм - это концепция, при которой различные объекты могут иметь одинаковое имя или интерфейс, но выполнять разные действия. Полиморфизм позволяет обрабатывать объекты разных классов с использованием общего интерфейса, что делает код более гибким и расширяемым.
Пример:
python
class Animal:
def speak(self):
pass
class Dog(Animal):
def speak(self):
return "Woof!"
class Cat(Animal):
def speak(self):
return "Meow!"
def make_speak(animal):
print(animal.speak())
dog = Dog()
cat = Cat()
make_speak(dog) # Выведет "Woof!"
make_speak(cat) # Выведет "Meow!"
В этом примере функция `make_speak` принимает объект класса `Animal` или любого его производного класса. Затем функция вызывает метод `speak` для переданного объекта. Несмотря на то, что объекты `dog` и `cat` относятся к разным классам, мы можем использовать их вместе в функции `make_speak`, так как они имеют общий интерфейс - метод `speak`. Это пример полиморфизма.
В заключение, наследование, инкапсуляция и полиморфизм являются важными понятиями ООП. Наследование позволяет создавать иерархию классов и расширять функционал с помощью наследования, инкапсуляция обеспечивает доступ к данным и методам только через интерфейс класса, а полиморфизм позволяет работать с различными объектами через общий интерфейс. Эти понятия помогают создавать более гибкий, модульный и поддерживаемый код.Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет