首页 > 解决方案 > 类能做什么而函数不能?(Python)

问题描述

在 Python 领域:

除了组织代码/设计模式之外,一个类可以做什么功能不能做的事情?

技术上不能通过函数编写任何类吗?并不是说它会更有效或更易读,而是就纯粹的功能而言。

换句话说,有人可以学习任何课程并仅使用函数重写它吗?

标签: python

解决方案


关于我能想到的唯一很大程度上独特的常用功能是类可以是多态的,并且类可以使用运算符重载。

使用闭包范围的嵌套函数可以通过让每个闭包充当一个“实例”来完成类所做的大多数有状态属性的事情,而在该闭包范围中定义的函数就像方法一样,所以从这个意义上说,你可以使用共享持久状态的“方法”编写非常丑陋的代码。

但是运行时动态多态不是一种选择(您可以选择不同的函数来返回关闭该共享状态,但它不会让您以任何理智的方式进行多态扩展)。

您也无法模拟重载运算符的现有类型;运算符重载必须在类型上完成,而不是在实例上,并且所有用户定义的函数共享一个不允许您重载其他运算符的类型。

需要明确的是,有些事情可以用类来做,而用函数来做会更好。特别是,编写自己的可迭代和成对的迭代器类是一件痛苦的事情,但是生成器函数可以用来制作完全没有类的迭代器,或者定义__iter__一个可迭代的,而不需要编写用户定义的令人难以置信的丑陋迭代器类。基本上,它们都存在,使用为当前情况量身定制的。


推荐阅读