Это не очень просто, потому что классы определяются во время выполнения блока классов, а не во время создания экземпляра.
Вместо этого популярным шаблоном проектирования будет ставить общийкод в mixin :
class FooMixin:
# stuff needed by both Foo(Bar) and Foo(Wall)
class FooBar(FooMixin, Bar):
...
class FooWall(FooMixin, Wall):
...
Тогда вы можете использовать какую-то заводскую функцию:
def make_foo(parent, *init_args, **init_kwargs):
if parent is Bar:
Foo = FooBar
elif parent is Wall:
Foo = FooWall
return Foo(*init_args, **init_kwargs)