Imaginemos que tienes una clase Class1 con una buena colección de métodos. Para facilitar su uso quieres agrupar los métodos, de modo que tendrias esto:

c = Class1(param1, param2)
c.colors.green()
c.colors.yellow()
c.animals.bird()
c.animals.mouse()
etc..

Ademas necesitas que los metodos tengan acceso a los datos de la clase padre.

Para agrupar métodos en clases de Python, puedes utilizar clases internas (o anidadas). Estas clases se definen dentro del cuerpo de otra clase. Si se crea un objeto utilizando una clase, el objeto dentro de la clase raíz puede ser utilizado. Una clase puede tener una o más clases internas. Si quieres que los métodos de las clases internas tengan acceso a los datos de la clase padre, puedes hacerlo pasando self a la clase interna.

Aquí un ejemplo de cómo hacerlo:

class Class1:
   def __init__(self, param1, param2):
       self.param1 = param1
       self.param2 = param2
       self.colors = self.Colors(self)
       self.animals= self.Animals(self)

   class Colors:
       def __init__(self, parent):
           self.parent = parent

       def green(self):
           print("green")
           print(self.parent.param1)

       def yellow(self):
           print("yellow")
           print(self.parent.param2)

   class Animals:
       def __init__(self, parent):
           self.parent = parent

       def bird(self):
           print("bird")
           print(self.parent.param1)

       def mouse(self):
           print("mouse")
           print(self.parent.param2)