我最近看到几个人在 Stackoverflow 上做这样的事情:
class A:
foo = 1
class B:
def blah(self):
pass
换句话说,它们有嵌套类。这行得通(尽管 Python 新手似乎会遇到问题,因为它的行为不像他们想象的那样),但我想不出有任何理由用任何语言来做这件事,当然在 Python 中也不会。有这样的用例吗?人们为什么要这样做?搜索这个似乎在 C++ 中相当普遍,有充分的理由吗?
最佳答案
将一个类放在另一个类中的主要原因是为了避免仅在一个类中使用因此不属于全局命名空间的事物污染全局命名空间。这甚至适用于 Python,全局命名空间是特定模块的命名空间。例如,如果您有 SomeClass 和 OtherClass,并且它们都需要以专门的方式阅读某些内容,那么最好使用 SomeClass.Reader 和 OtherClass.Reader 而不是 SomeClassReader 和 OtherClassReader。
不过,我从未在 C++ 中遇到过这种情况。 It can be problematic to control access to the outer class' fields from a nested class.在头文件中定义的编译单元中只有一个公共(public)类,而在 CPP 文件中定义一些实用程序类(Qt 库就是一个很好的例子)也是很常见的。这样他们对“局外人”是不可见的,这很好,所以将它们包含在标题中没有多大意义。它还有助于提高二进制兼容性,否则很难维护。好吧,无论如何这都是一种痛苦,但不那么痛苦。
嵌套类真正有用的语言的一个很好的例子是 Java。那里的嵌套类自动有一个指向创建它们的外部类实例的指针(除非您将内部类声明为静态的)。这样您就不需要将“外部”传递给它们的构造函数,您可以仅通过它们的名称来寻址外部类的字段。
关于c++ - 是否有嵌套类的用例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4482901/