Семантика наследования и реализации - PullRequest
0 голосов
/ 27 сентября 2019

Я относительно новичок в Python и пришел из языка (Java) с совершенно другим взглядом на ООП.В большинстве случаев я понимаю, как делать в Python то, что я делал в Java, но я все еще борюсь с новой философией.В частности, я не уверен, что полностью понимаю наследование и создание экземпляров.Ниже я напишу, каково мое нынешнее понимание этих двух понятий в Python: Пожалуйста, исправьте меня, если я говорю неправильно, подтвердите, если это правильно, или добавьте любое уточнение, которое, по вашему мнению, необходимо.

(1) Наследование - это отношение между объектами (не между классами), если объект obj1 наследуется от объекта obj2 и упоминание атрибута attr не может быть разрешено впространство имен obj1, Python попытается разрешить attr в пространстве имен obj2 (то есть obj1.attr станет фактически obj2.attr).И это все.Нет другой семантики, связанной с концепцией наследования.

(2) Когда мы определяем класс с кодом вида class A(B): …, A на самом деле не наследует B (то естьсоздаваемый нами объект класса A не наследует объект класса B в смысле (1)).Этот оператор только указывает, что экземпляр A будет наследовать B.Так, например, из кода A у нас не будет доступа к статическим методам B (если мы не достигнем их с помощью ограждающей или глобальной области видимости).

(3) Anинстанцирование является формой наследования, код x = A() создает объект x, который наследует классы A и B (в этом порядке, в смысле (1)).

Вкратце, создание экземпляров - это наследование (это было действительно трудно для меня принять), а классы (то есть объекты классов) не наследуют, их экземпляры делают.

РЕДАКТИРОВАТЬ:

Для пояснения немноговопрос, рассмотрим следующий код:

class Context:
     class A:
         def salute(): print('hello')
     class B(A):
         def __init__(self): A.salute()
     B()

Этот wont'run, A.salute() не наследуется в смысле Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...