Skip to content
Advertisement

Cast base class to derived class python (or more pythonic way of extending classes)

I need to extend the Networkx python package and add a few methods to the Graph class for my particular need

The way I thought about doing this is simplying deriving a new class say NewGraph, and adding the required methods.

However there are several other functions in networkx which create and return Graph objects (e.g. generate a random graph). I now need to turn these Graph objects into NewGraph objects so that I can use my new methods.

What is the best way of doing this? Or should I be tackling the problem in a completely different manner?

Advertisement

Answer

If you are just adding behavior, and not depending on additional instance values, you can assign to the object’s __class__:

JavaScript

Prints:

JavaScript

This is as close to a “cast” as you can get in Python, and like casting in C, it is not to be done without giving the matter some thought. I’ve posted a fairly limited example, but if you can stay within the constraints (just add behavior, no new instance vars), then this might help address your problem.

User contributions licensed under: CC BY-SA
1 People found this is helpful
Advertisement