为什么要在Python中使用的类之外声明函数?例如,在Github以下项目做到这一点与它的_hash,_task_from_taskline和_tasklines_from_tasks功能。格式与以下相同:class UnknownPrefix(Exception):"""Raised when trying to use a prefix that does not match any tasks."""def __init__(self, prefix): super(UnknownPrefix, self).__init__() self.prefix = prefixdef _hash(text): return hashlib.sha1(text).hexdigest()def _task_from_taskline(taskline): """ snipped out actual code """ return taskdef _tasklines_from_tasks(tasks): """Parse a list of tasks into tasklines suitable for writing.""" return tasklines但是我认为这些功能与类有关TaskDict。为什么要把他们排除在班上?将它们在类外声明有什么好处?
3 回答
动漫人物
TA贡献1815条经验 获得超10个赞
将停止写作课PYCON谈话是不完全对这个问题,但包括我的感觉是相关的经验教训在这里:基本上,这个想法是,类是用于创建对象。所有的属性,实例方法和类方法都应进一步促进创建对象或使对象正常工作的目标。类不是用于代码组织的(在这种理论下),这就是模块的用途。
这是一个很自以为是的策略,并非所有人都同意。但是,如果您在这种情况下考虑示例,则很明显,函数不属于类的原因是,即使函数被类使用,它们实际上也不会对任何对象进行操作或进一步创建直接对任何对象。它们只是实用程序函数,不受任何特定类的约束,理论上可以在库中的其他地方使用。
那么,为什么或为什么不把它们放在课堂上呢?归结为您是否认为应该将类用于代码组织。在这种情况下,作者显然接受了这样的想法,即模块是用于代码组织的,而不是类。
哈士奇WWW
TA贡献1799条经验 获得超6个赞
它们比成员函数更易于导入且名称更短
即使将它们放在类中,无论如何它们仍可能是类方法/静态方法。
Pythonic代码使用鸭子类型。一个方法将暗示它只能与该类一起使用,而实际上,代码可能比该类更通用。
个人喜好。有些人喜欢将“域模型”和“业务逻辑”分开。
最后,对于此特定程序,以任何一种方式进行操作实际上都没有好处也没有缺点。
添加回答
举报
0/150
提交
取消