¿Es una buena práctica hacer clases anidadas en python?

Logro definir una clase A, usar una lista de instancias de otra clase B como variable de instancia de la clase A. La clase B tiene una función para cambiar otra variable de instancia a1 de la clase A. La clase A también tiene una función para cambiar la variable de instancia bb de la clase B. Así que la clase A puede acceder a la clase B y la clase B puede acceder a la clase A. Los dos clasificados están nesteds juntos. Sé que podemos facilitar las cosas para cambiar todas las variables de instancia y la función de la clase B a la clase A. Pero en mi proyecto, esta estructura anidada es lo que son las cosas reales.

class A: class B: count = 0 def __init__(self,b1=None,b2=None): self.b1 = b1 self.b2 = b2 def funcb(self,bb): A.a1 = pyfunc1(bb) def __init__(self,a1,a2): self.a1 = a1 self.a2 = a2 self.listb = [AB()] def funca(self,aa): ABcount += 1 b = AB(self.a1,self.a2) listb.append(b) listb[ABcount].b1 = listb[ABcount-1].b1.pyfunc2(aa) listb[ABcount].b2 = pyfunc3(aa,self.a2) listb[ABcount].funcb(self.a2) 

Lo que quiero saber es si ese tipo de clase anidada reducirá la eficiencia de Python? ¿Alguna solución mejor?

Anidar una clase no reduce ni aumenta la eficiencia de ejecución. Puede alterar el mantenimiento y comprender la eficiencia.

La clase anidada se convierte en un atributo más en la clase padre. Tendrás que referenciarlo como AB lugar de B Eso es todo, aplazó la búsqueda a un espacio de nombres diferente. En otras palabras, su método __init__ fallará, porque no hay un nombre global B , solo AB y self.B existen (ambos hacen referencia al mismo objeto de clase).

De lo contrario, no hay una relación especial entre una clase anidada y su padre, como existe en Java.

La mayoría de los desarrolladores de Python no anidan clases, así que cuando lo haces, rompes lo convencional y aumentas los costos de mantenimiento.