In case I would like dynamically add a base class to child class but I don't know what classes will be
which option should I use?
# first_file.py
# Option 1
def add_base(clazz, new_parent_class):
bases = tuple(list(clazz.__bases__) + [new_parent_class])
clazz.__bases__ = bases
return clazz
# Option 2
def add_base(clazz, new_parent_class):
bases = tuple(list(clazz.__bases__) + [new_parent_class])
clazz = type(clazz.__name__, bases, dict(clazz.__dict__))
return clazz
# second_file.py
class OtherClass(object # or any other class #)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
class MyClass(object # or any other class #)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# fourth_file.py
from first_file import add_base
from second_file import OtherClass
from third_file import MyClass
new_class = add_base(OtherClass, MyClass)
ins = new_class()