Я пытаюсь подобрать Python для проекта, и я немного смущен тем, как использовать абстракции и классы. (Я не очень опытный программист, поэтому извиняюсь за базовый уровень этого вопроса.) Я исхожу из фона Java/Ocaml, и то, что я пытаюсь сделать, выглядит следующим образом: у меня есть абстрактные классы для графика и graphadvanced (график с некоторыми более причудливыми методами), которые выглядят что-то вроде этогоАбстракция в Python?
class AbstractGraph:
def method1(self):
raise NotImplementedError
...
class AbstractAdvanced:
def method2(self):
raise NotImplementedError
...
Я тогда реализации графа:
class Graph(AbstractGraph):
def method1(self):
* actual code *
Теперь мой вопрос: могу ли я сделать что-то как это?
class Advanced(AbstractAdvanced, AbstractGraph):
def method2(self):
*actual code, using the methods from AbstractGraph*
Другими словами, как я могу определить методы Advanced отвлеченно с точки зрения методов AbstractGraph, а затем каким-то образом передать Graph в конструктор, чтобы получить экземпляр Advanced, который использует определения Advanced с реализацией графа?
Что касается Ocaml, я пытаюсь рассматривать AbstractAdvanced и AbstractGraph как типы модулей, но я немного поиграл с python, и я не уверен, как заставить это работать.
исправить форматирование, нажмите 'code' вкладку, когда вы редактирование – Shep
В python обычно нет необходимости в таких вещах. Просто напишите фактический код. – georg
Как я понимаю, python не использует строгую концепцию интерфейсов и typechecks, например, например. Ява. Через Duck-Typing это не имеет смысла. Поэтому вы просто это делаете. Cou может принудительно выполнить его с помощью isinstance() вызывает ваш параметр, но это не даст вам статического ввода, к которому вы привыкли. Python - динамически типизированный язык. – sleeplessnerd