Pythonic方式:在类中还是模块中使用工具函数
我是一名Python初学者,想知道写工具函数的更“Python风格”的方法是什么?就像在Java或C++中那样,创建一个工具类并在里面写方法,还是直接在模块里写函数?这些函数会在同一个模块中的不同类之间使用。
对于模块中不同类和函数使用的变量也是同样的问题。我可以把它们放在工具类里面,或者直接在模块里定义。哪种方式更符合Python的风格呢?希望有人能指导我。
我支持把它们写在类里面的唯一理由是,这样更符合面向对象的编程。
1 个回答
欢迎来到Python的世界!你现在离C++和Java远着呢,这可是一件好事。;)
下面这段话摘自一位关于面向对象编程的精彩讨论,作者是另一位StackOverflow的志愿者:
快问你自己,面向对象编程到底是讲什么的?
...
如果你想到“封装”、“继承”、“多态”、“信息隐藏”、“抽象”或者“虚表”这些词,那你就错了。
如果你想到“类”、“原型”或者“类型”,那你还是错了。
面向对象编程其实是关于对象的:状态和行为的组合。
我为什么要引用这段话呢?(首先,这种表达方式在Python中是很受欢迎的,因为它传达了深刻的意思。)因为这其中包含了你问题的答案。
你的“工具函数”是否真的代表了一种可以很好地表达的行为(关键字是“很好”),并且可以作为继承层次中的父对象?如果是这样,那就把它放进一个类里。但如果只是为了放进一个类而创建一个类,那就没必要了。
你在写Python的时候,总是在参与面向对象编程,因为Python中的一切都是对象。(想想看,你甚至可以对字面量调用方法,比如'hello'.upper()
。)如果你换个角度看,甚至可以把你的模块看作是类定义内部的东西。它们有自己的作用域,可能还有模块级的函数(如果你跟着我的比喻,可以称它们为模块“方法”),也可能有内部类。它们的行为非常相似,因为本质上是同一个接口。
我建议你看看你的site-packages
目录,看看里面有哪些可用的模块和包。你会得到一些很好的想法,了解通常是怎么做的,可能还会看到很多模块级函数的例子,这些正是你所说的“工具函数”。