Page 1 of 1

Abstraction in Python?

Posted: 23 Jun 2022, 14:16
by MukeshPython
I'm trying to pick up Python for a project, and I'm a bit confused about how to use abstraction and classes. (I'm not a very experienced programmer, so apologies for the basic level of this question.) I come from a Java/Ocaml background, and what I've been trying to do is as follows: I have abstract classes for a graph and a graph advanced (a graph with some more fancy methods), that looks something like this

Code: Select all

class AbstractGraph: 
   def method1(self): 
      raise NotImplementedError
   ...
 
class AbstractAdvanced:
   def method2(self):
      raise NotImplementedError 
   ... 
I then have an implementation of a graph:

Code: Select all

class Graph(AbstractGraph):
   def method1(self):
      * actual code * 
Now my question is: can I do something like this?

Code: Select all

class Advanced(AbstractAdvanced, AbstractGraph):
   def method2(self):
      *actual code, using the methods from AbstractGraph*
In other words, how can I define the methods of Advanced abstractly in terms of the methods of AbstractGraph, and then somehow pass Graph into a constructor to get an instance of Advanced that uses Advanced's definitions with Graph's implementation?

In terms of Ocaml, I'm trying to treat AbstractAdvanced and AbstractGraph as module types, but I've played around a little with python and I'm not sure how to get this to work.

Re: Abstraction in Python?

Posted: 25 Jun 2022, 00:02
by kjkoster
Dear MukeshPython,

In general I would advise not to try to keep your Java programming style in Python. They have different philosophies at their cores and if you try to write Java in Python too much you actually make your life harder for yourself.

That said: this tutorial will probably answer your question better than I can: https://realpython.com/inheritance-composition-python/ Hope this helps.

Kees Jan (who also learned Python after Java)