|
|||||||
Инкапсуляция, наследование, полиморфизм
Время создания: 29.07.2019 23:51
Раздел: Разные закладки - Python
Запись: xintrea/mytetra_db_adgaver_new/master/base/1533760997rau9u9sjoy/text.html на raw.githubusercontent.com
|
|||||||
|
|||||||
Недавно мы говорили об основах объектно-ориентированного программирования в python , теперь продолжим эту тему и поговорим о таких понятиях ООП, как инкапсуляция, наследование и полиморфизм. ИнкапсуляцияИнкапсуляция — ограничение доступа к составляющим объект компонентам (методам и переменным). Инкапсуляция делает некоторые из компонент доступными только внутри класса. Инкапсуляция в Python работает лишь на уровне соглашения между программистами о том, какие атрибуты являются общедоступными, а какие — внутренними. Одиночное подчеркивание в начале имени атрибута говорит о том, что переменная или метод не предназначен для использования вне методов класса, однако атрибут доступен по этому имени. class A: def _private(self): print("Это приватный метод!") >>> a = A() >>> a._private() Это приватный метод! Двойное подчеркивание в начале имени атрибута даёт большую защиту: атрибут становится недоступным по этому имени. >>> >>> class B: ... def __private(self): ... print("Это приватный метод!") ... >>> b = B() >>> b.__private() Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'B' object has no attribute '__private' Однако полностью это не защищает, так как атрибут всё равно остаётся доступным под именем _ИмяКласса__ИмяАтрибута: >>> >>> b._B__private() Это приватный метод! НаследованиеНаследование подразумевает то, что дочерний класс содержит все атрибуты родительского класса, при этом некоторые из них могут быть переопределены или добавлены в дочернем. Например, мы можем создать свой класс, похожий на словарь : >>> >>> class Mydict(dict): ... def get(self, key, default = 0): ... return dict.get(self, key, default) ... >>> a = dict(a=1, b=2) >>> b = Mydict(a=1, b=2) Класс Mydict ведёт себя точно так же, как и словарь, за исключением того, что метод get по умолчанию возвращает не None, а 0. >>> >>> b['c'] = 4 >>> print(b) {'a': 1, 'c': 4, 'b': 2} >>> print(a.get('v')) None >>> print(b.get('v')) 0 ПолиморфизмПолиморфизм - разное поведение одного и того же метода в разных классах. Например, мы можем сложить два числа, и можем сложить две строки. При этом получим разный результат, так как числа и строки являются разными классами. >>> >>> 1 + 1 2 >>> "1" + "1" '11' |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|