在Python领域:
除了组织代码/设计模式之外,类还能做什么函数不能做的事情?
从技术上讲,人们不能通过函数编写任何类吗?并不是说它会更高效或更具可读性,而是就纯粹的功能而言。
换句话说,有人可以选择任何类并仅使用函数重写它吗?
我能立即想到的唯一基本独特、常用的功能是类可以是多态的,并且类可以使用运算符重载。
使用闭包作用域的嵌套函数可以通过让每个闭包充当一个“实例”来完成类所做的大部分有状态属性操作,并且在该闭包作用域中定义的函数类似于方法,因此从这个意义上说,您可以使用共享持久状态的“方法”编写非常丑陋的代码。
但运行时动态多态性不是一个选项(您可以选择不同的函数来返回关闭该共享状态,但它不会让您以任何理智的方式拥有多态扩展)。
您也无法模拟重载运算符的现有类型;运算符重载必须在类型上完成,而不是实例上,并且所有用户定义的函数共享一个类型,这不允许您重载其他运算符。
需要明确的是,有些事情可以用类来完成,而用函数可以更好地完成。特别是,编写自己的可迭代和成对迭代器类是一件痛苦的事情,但是生成器函数可用于创建根本没有类的迭代器,或者定义可迭代的 ,而__iter__无需编写用户定义的令人难以置信的丑陋迭代器类。基本上,它们都存在,使用明显适合当前情况的那个。