De lo que estoy hablando aquí son clases anidadas. Esencialmente, tengo dos clases que estoy modelando. Una clase DownloadManager y una clase DownloadThread. El concepto obvio de OOP aquí es la composición. Sin embargo, la composición no necesariamente significa anidar, ¿verdad?¿Hay algún beneficio en definir una clase dentro de otra clase en Python?
tengo código que se ve algo como esto:
class DownloadThread:
def foo(self):
pass
class DownloadManager():
def __init__(self):
dwld_threads = []
def create_new_thread():
dwld_threads.append(DownloadThread())
Pero ahora me pregunto si hay una situación en la anidación sería mejor. Algo como:
class DownloadManager():
class DownloadThread:
def foo(self):
pass
def __init__(self):
dwld_threads = []
def create_new_thread():
dwld_threads.append(DownloadManager.DownloadThread())
Yo-argumentaría que en el segundo caso, usted -definitivamente- estaría mejor servido usando un módulo o paquete, que están diseñados para ser espacios de nombres. –
Esta es una respuesta fantástica. Simple, al grano, y menciona el método alternativo de usar módulos. +1 – CornSmith
Solo para el registro, para aquellos que obstinadamente se niegan o no pueden organizar su código en un paquete jerárquico y módulos adecuados, usar clases como un espacio de nombres a veces puede ser mejor que no usar nada. –