内部类是unpythonic吗?

时间:2009-05-29 14:40:35

标签: python

我的同事刚刚指出我对内部阶级的使用似乎是“单一的”。我猜它违反了“扁平比嵌套更好”的启发式。

这里的人们怎么想?内部类比Java更适合Java等吗?

注意:我不认为这是一个“主观”的问题。当然,风格和美学是编程社区中的目标。


相关问题: Is there a benefit to defining a class inside another class in Python?

3 个答案:

答案 0 :(得分:10)

这可能不值得StackOverflow上的[主观]标签,但它在较大的舞台上是主观的:一些语言社区鼓励嵌套,而其他人则不鼓励它。那么为什么Python社区不鼓励嵌套呢?因为蒂姆·彼得斯把它放在The Zen of Python中?它是否适用于所有场景,无一例外?应该将规则作为指导,这意味着在应用它们时不应该关闭你的大脑。您必须了解规则的含义以及为什么有人打扰制定规则的重要性。

我知道保持平稳的最大原因是因为另一种理念:做一件事,做得好。生活在其他课程中的许多小特殊目标课程表明你没有足够的抽象。即,您应该删除需要和愿望以获得内部类,而不是只是为了遵守规则而将它们移到外面。

但有时你确实有一些行为应该被抽象成一个类,而这是一个特殊情况,只能在另一个单独的类中获得。在这种情况下,你应该使用一个内部类,因为它是有意义的,它告诉其他人阅读代码,那里有一些特殊的东西。

  • 不要盲目遵守规则。
  • 了解规则的原因并尊重该规则。

答案 1 :(得分:9)

“Flat优于嵌套”专注于避免过度嵌套 - 即严重的深层次结构。嵌套的一个层次本身并没有什么大不了的:只要你的嵌套仍然尊重Law of Demeter的弱化形式,这通常证明你没有发现自己写的东西{ {1}}(表达式中的点太多是“代码气味”,表明你已经在嵌套方面做得太深,需要重构以解决问题),我不会太担心。

答案 2 :(得分:1)

实际上,我不确定我是否同意“Flat优于嵌套”的整个前提。有时,实际上,通常情况下,表达某事的最佳方式是层次结构......即使是自然本身,也常常使用层次结构。

相关问题