Просто добавлю свои мысли по этому поводу: В дополнение к ответу @Ned Batchelder вы можете использовать статические методы для достижения аналогичной цели.
class ClassA():
class Foo():
def fooTest(self):
print("Hello from {}!".format(self.__name__))
@staticmethod
def getFoo():
return ClassA.Foo
class ClassB(ClassA):
pass
И тест с:
>>> Foo = ClassB.getFoo()
>>> foo = Foo()
>>> foo.fooTest()
Hello from Foo!
Это для меня демонстрирует красоту языка питона - обычно есть несколько способов решения одной и той же проблемы ...