营销展示型网站建设价格,用网站做成软件,计算机女生就业方向,如何让网站速度快许多人都在抨击面向对象#xff0c;虽然我不认为他有什么问题#xff0c;但我觉得至少在Python 中没必要。近来#xff0c;许多人都在抨击面向对象#xff0c;虽然我不认为面向对象本身有什么问题#xff0c;但我觉得至少在 Python 中没这个必要。1、没有必要使用面向对象…许多人都在抨击面向对象虽然我不认为他有什么问题但我觉得至少在Python 中没必要。近来许多人都在抨击面向对象虽然我不认为面向对象本身有什么问题但我觉得至少在 Python 中没这个必要。1、没有必要使用面向对象举个例子比如下面的代码完全没有必要使用面向对象。这里使用了面向对象因为我们想把 root_url 绑定到某个对象上而且不想每次都传递 sessionmaker。我们还想使用继承在调用的中途访问一个方法。但如果只通过数据传递和函数能实现吗我们必须随时传递 Client 和 session_cls。但有什么关系呢代码量甚至还少了 10%。这样编写的代码很容易理解而且不需要使用面向对象。有人管这种写法叫做“函数袋”。就是说整个代码都由有类型的数据和一大堆模块作用域的函数组成。那么全局变量怎么处理你可以参考这篇文章(https://leontrolski.github.io/sane-config.html)在整个应用程序的生命周期内重用 config 或 db 的 session接口、抽象类怎么办实际上你不需要它们直接写代码就行了。平心而论Python 有了类型标注之后函数袋风格才开始发挥真正的魅力。不纯粹的函数怎么办如果你想采用纯粹的函数式编程你可能想编写纯粹的类然后使用不纯粹的“适配器”实例来做一些处理getting-the-current-datetime/API-calls/talking-to-the-db/other-impure-stuff。这个想法很不错。实际上你可以直接使用 freezegun、responses 等方法来避免大量麻烦。2、例外但也有一些例外的情况你可能注意到重构的代码中加入了dataclass它们只是记录类型。Python 5 可以直接支持这些不需要使用“常规”类。使用 Exception 的子类是没问题的。使用 try: ... except SomeClass: ...基本上会形成一种层级不过没关系只要不要搞得过于复杂。Enum与上面一样它们非常适合 Python。在极罕见的情况下(至少在应用程序的开发中很少遇到)你可能会想出一种非常好用的类型然后到处使用就像pandas.DataFrame/sqlalchemy.Session 一样。但是一般情况下不要自欺欺人不要骗自己说我们正在构建了不起的应用程序。谦虚使人进步。3、面向对象的弊端虽然在本文开头我说过我不认为面向对象本身有什么问题但实际上我还是觉得面向对象不仅没有帮助性而且还常常混淆问题鼓励一些不良做法面向对象鼓励你修改数据。函数袋非常反对修改参数。不相信的话你可以试试看但可千万别生气。面向对象只是返回的全局变量。你无法在函数之间共享数据self 会强迫你使用更小的状态空间编写方便测试的函数。混合数据和函数会加剧序列化的难度而在当今 REST API 流行的情况下序列化非常有用。面向对象带来了疯狂的继承体系关于这个话题的讨论到处都是。最重要的是面向对象没有任何附加价值它只会导致你无法专心解决问题并加剧浏览与理解代码的难度。