python - 类能做什么而函数不能?(Python)
问题描述
在 Python 领域:
除了组织代码/设计模式之外,一个类可以做什么功能不能做的事情?
技术上不能通过函数编写任何类吗?并不是说它会更有效或更易读,而是就纯粹的功能而言。
换句话说,有人可以学习任何课程并仅使用函数重写它吗?
解决方案
关于我能想到的唯一很大程度上独特的常用功能是类可以是多态的,并且类可以使用运算符重载。
使用闭包范围的嵌套函数可以通过让每个闭包充当一个“实例”来完成类所做的大多数有状态属性的事情,而在该闭包范围中定义的函数就像方法一样,所以从这个意义上说,你可以使用共享持久状态的“方法”编写非常丑陋的代码。
但是运行时动态多态不是一种选择(您可以选择不同的函数来返回关闭该共享状态,但它不会让您以任何理智的方式进行多态扩展)。
您也无法模拟重载运算符的现有类型;运算符重载必须在类型上完成,而不是在实例上,并且所有用户定义的函数共享一个不允许您重载其他运算符的类型。
需要明确的是,有些事情可以用类来做,而用函数来做会更好。特别是,编写自己的可迭代和成对的迭代器类是一件痛苦的事情,但是生成器函数可以用来制作完全没有类的迭代器,或者定义__iter__
一个可迭代的,而不需要编写用户定义的令人难以置信的丑陋迭代器类。基本上,它们都存在,使用为当前情况量身定制的。
推荐阅读
- python - 通过python数据框获取每个移位值组
- javascript - 无法在 Wordpress 中隐藏移动菜单项
- javascript - Javascript 只能隐藏第一行的按钮
- java - 如何在 Intelij Idea 中更改 Gradle 的自定义路径
- .net-core - 我的代码中显示了缺少类型映射配置异常
- laravel - 在 AWS RDS 中使用 SSL 将 Laravel 7 与 Postgres 12.4 连接的问题
- python - 为什么它说“期望一个缩进块”?
- javascript - 我想使用 javascript 录制音频输入并将其保存到磁盘
- sql - 如何在 Visual FoxPro 中插入多行?
- python - python - 如何在没有任何模型信息的情况下从 .pth 文件中获取类的数量?