我说的是嵌套类。基本上,我有两个我正在建模的类。下载管理器类和下载线程类。这里明显的OOP概念是组合。然而,构图并不一定意味着嵌套,对吧?
我有这样的代码:
class DownloadThread:
def foo(self):
pass
class DownloadManager():
def __init__(self):
dwld_threads = []
def create_new_thread():
dwld_threads.append(DownloadThread())
但现在我想知道是否有一种情况下筑巢会更好。类似于:
class DownloadManager():
class DownloadThread:
def foo(self):
pass
def __init__(self):
dwld_threads = []
def create_new_thread():
dwld_threads.append(DownloadManager.DownloadThread())
我不认识Python,但你的问题似乎很笼统。如果是特定于Python的,请忽略我。
类嵌套与作用域有关。如果您认为一个类只在另一个类的上下文中才有意义,那么前者可能是成为嵌套类的一个很好的候选者。
它是一种常见的模式,将助手类作为私有的嵌套类。
这样做真的没有什么好处,除非你在处理元类。
学生:套房真的不是你想象的那样。这是一个奇怪的范围,它做奇怪的事情。它真的连课都上不了!它只是收集一些变量的一种方式——类的名称、基、一些属性字典和一个元类。
名称、字典和基都被传递给作为元类的函数,然后它被分配给class:suite所在的作用域中的变量“name”。
如果不熟悉“类”作用域与任何其他python作用域完全不同的原因,那么通过混淆元类,甚至通过将类嵌套在您的标准类中,您将获得更难阅读的代码、更难理解的代码和非常难以理解的奇怪错误。
当“inner”类是一次性的时,您可能需要这样做,它永远不会在外部类的定义之外使用。例如,使用一个元类有时很方便
而不是单独定义一个元类,如果你只使用它一次。
另一次我使用嵌套类的时候,我只将外部类用作一个命名空间,将一堆紧密相关的类组合在一起:
然后,从另一个模块中,您可以导入Group并将其称为Group.cls1、Group.cls2等。但是,有人可能会说,通过使用一个模块,您可以完成完全相同的任务(也许是以一种不那么混乱的方式)。
相关问题 更多 >
编程相关推荐