Python3 面向对象与面向函数的对比使用(见解)
Python版本
:3.7.2
Python IDE编辑器
:Pycharm
首先,我们需要明确我们的业务需求,根据业务方面来去制定实现需求的方案。
简单明了来说,你现在需要做个
WEB后端
。那么,你的代码(使用
Tornado
库)很有可能是这个样子的。
# -*- coding:utf-8 -*-
import ***
from *** import ***
class MainHandler(Request, ABC):
def get(self):
self.render('index.html')
if __name__ == '__main__':
***
***
这只是个例子,一般情况下,我们会将运行文件命名为
Main.py
,并且使用
if __name__ == '__main__'
来去限制执行。这么做,不仅仅是为了以当前文件执行,同时也方便我们在平常开发时进行调试和修改。
上面所讲的,只是面向对象的一个典型用法。这在处理一些主副场景时,会十分好用。
同样的,这对于单一场景也是非常友好的。
比方说,我们对于这样的场景,会有很多种不同的写法。
主业务 |----> 业务点 1 |----> 业务点 2 |----> 业务点 3
对应的面向对象代码(OOP-Code)
# -*- coding:utf-8 -*- class Main(): def get(self): print("业务1") def post(self): print("业务2") def delete(self): print("业务3") def update(self): print("业务4") if __name__ == '__main__': main = Main() main.get()
这么编写,可以解决各个业务点之间的耦合问题。同样的,如果我们在从事开发职业,顺带了解运维职业中的架构解耦。这对于我们编写更优秀的代码有着很大的帮助。
现在,我们聊一聊对面向函数编程的使用。同时,博主会在写的过程中,将OOP和面向函数共同使用顺带讲解。
# -*- coding:utf-8 -*-
def DB():
connect = Client('*****')
class Main():
def get(self):
DB()
class Accept():
def post():
DB()
if __name__ == '__main__':
main = Main()
accept = Accept()
在当前这个文件中,我们可以看到定义函数
和定义类
两种使用方式。这其中,我们将数据库操作放在了DB
中,而在get()
和post()
中使用它。这也就意味着,主业务使用解耦方式来去构建代码,而实现主业务的通用代码放在构建函数中。
当然,博主说的话不一定对。因为在很多
Python第三方库中
,库作者为了将更多的功能和更简洁的思想融入进更简短的代码中。面向函数式并不太适合于这一行为。
比方说,
Redis
的操作有很多种,那么我们只想实例化一次,但每一次的操作都是全新的(不同的)。那么我们可以看一下面的代码。redis = Redis() redis.get() redis.set() redis.keys() redis.del()
在使用过程中,我们确确实实只实例化了一次,但这一次实例化操作将它的方法全部带入进来。在使用的过程中,我们不需要记住我们编写方法的名字,因为在每一次调用时
redis.
IDE都会提示我们。但如果我们将这种方式转换为面向函数写法,很可能代码将面临一种浅层次相互依赖的关系。
举个更为简单的例子,在
Docker
中,我们将每一个应用都视为一个容器。这样做的目的是一个拥有复杂或简单依赖的应用全部包含在一个环境中。并且,这个环境不会影响其他与它同级的容器。这便是简易版集装箱
,也是Docker
的一种云应用方式。
说到这里,博主千言万语都压缩成这篇简短的话语。对于是否使用,或者有必要改变开发者的书写习惯,这无关紧要。最重要的是,在编写代码过程中,循序渐进!不要尝试思想上的跳级。