假设我有一个功能spam
和ham
的模块,它使用函数eggs
和foo
。
def spam():
eggs()
foo()
...
def ham():
eggs()
foo()
...
现在,eggs
和foo
仅由spam
和ham
使用,因此在模块级别公开它们没有意义。我可以将其名称更改为_eggs
和_foo
,以表明它们仅供内部使用,但这并未真正确定spam
,ham
,{{1}之间的关系}和eggs
。
所以,我可以创建一个容器类来保存这些函数:
foo
但这看起来很滑稽,因为我希望用户不要实例化class SpamHam:
@staticmethod
def _eggs():
...
@staticmethod
def _foo():
...
@staticmethod
def spam():
...
@staticmethod
def ham():
...
并仅使用它来调用静态方法。另外,当我想要的是在其方法之间建立某种关系时,使用类似乎并不合适。
我可以创建一个名为SpamHam
的单独模块,并将这四个函数放入其中,但spamham
和spam
确实属于他们已经存在的模块。
那么,在Python中建立这种关系的正确方法是什么?
答案 0 :(得分:4)
总的来说,我建议不要将这些事情视为功能之间的具体关系。函数应该是一个独立的代码单元 1 。我的中心论点是,你不应该认为eggs
属于spam
和ham
。 eggs
不应该关注spam
或ham
或bacon
或toast
是否有人调用它。重要的是,eggs
的名称尽可能清楚地让您立即了解所做的功能 2 。
诀窍是弄清楚你希望外面的人有权访问哪些功能...这决定了它是eggs
(公共)还是_eggs
(实施细节如有变更,恕不另行通知)正如你已经提到的那样。
1 这并不是说函数不能调用其他函数
2 最好正确关于函数做什么的想法... :)