Python - 我应该把辅助函数放在类内还是类外?
在Python中,如果一个类的一些方法需要一个辅助函数,但这个辅助函数本身并不使用类里的任何东西,我应该把这个辅助函数放在类里面还是外面呢?
我试着把它放在类里面,但PyLint(一个代码检查工具)却说这个函数其实可以放在外面。
@Karl:
这个类是一个软件升级器,而辅助函数的作用是如果文件夹还不存在,就创建一个新的文件夹。现在这个类所在的模块几乎只有这个类的代码,之后可能会添加其他类。
2 个回答
11
这个辅助函数可能更适合放在模块级别,而不是放在类里面。
如果你不同意这个观点,Python 提供了一个叫做 staticmethod 装饰器,可以用在类里面的函数上。简单来说,静态方法在同一个类的不同对象之间表现是一样的,它不依赖于实例的数据。
因此,使用 staticmethod
装饰器后,这个函数的行为就变成了不需要第一个隐含参数(通常是 self
),这在文档中有说明。
65
在决定把辅助函数放在哪里时,我会问自己一个问题:“这个函数只对这个类有用吗?”如果这个函数可以在其他地方也用到,那就把它放在模块级别;如果它确实只对这个类有用,那就把它放在这个类里面,可以用staticmethod
(不需要类的数据就能工作)或者classmethod
(使用一些类的数据,但不使用实例的数据)来定义。
另一个检查Python代码的工具是pyflakes。