Why are empty functions ever needed?
有人能描述用例或给出一个在Python中使用空函数的实时示例吗?
- 模拟对象通常具有那些"无用"的功能。
- 你是真的在问为什么需要它们,还是在问为什么它们是可能的?
- 空函数在任何语言中都同样有用或无用。你真正的问题是为什么需要pass?
- 我最近开始学习python,我可以得到pass的确切用途,但是我不能遵循空函数的概念,也不能实时地在任何代码中使用它们。
- 你所说的"实时"是什么意思?
空函数定义在任何语言中都同样是无意义或有用的,这里没有特定于Python的内容。您可以在任何情况下编写空函数,从需要一个用于测试的伪函数、用于绘制代码、用于抽象类等等。
这里唯一特别的是python的pass,这只是一个语法要求。在其他语言中,您可以编写function () {},python要求您使用空白和缩进来分隔函数,因此您必须在其中编写一些内容。而不是让每个人都定义自己如何处理这种情况的惯例,pass是存在的。
有争议的是,它们是否"需要",尽管它们很方便。
但是,我认为大多数人都同意需要pass语句,并且需要函数定义,而python不需要的是一个特殊情况,它会阻止您将pass用作函数中唯一的语句。
我们可以制作空函数来勾画出一个算法的高级概述,然后在后面进行各种函数的工作;基本上是一个占位符。
- 这不是个好例子。你只需把它从你的Animal类中移除,它就可以正常工作了。
- 因此,这不是一个令人信服的例子,因为即使Animal没有定义一个什么都不做的makeSound,Dog和Cat也会很好地工作。如果makeSound是一个抽象的方法,那么它就更有意义了。
- 我宁愿把raise NotImplementedError放在Animal的makeSound()里。
- 好吧,python是如此的灵活,它不会让任何问题从动物中删除makesound,但如果你使用的是高级的ide和autocomplete,你可能想添加makesound功能到你的动物类,这样ide知道自动完成什么。
- 他们的想法是,有人通过看动物课,了解动物的孩子可能实现什么。
这是我的一个项目的一个真实例子。
该项目允许用户配置任意操作,这些操作可以传递到程序的各个部分,因此它们可以触发对特定事件的自定义响应。
用户可能对某些事件也没有兴趣。然而,指定一个动作是强制性的,否则整个项目中每一个动作的单独使用都必须测试None,这很容易出错)。
因此,DoNothing作用:
1 2 3
| class DoNothing(Action):
async def __call__(self, context=None):
pass |
(如果动作是简单的函数,它只不过是def DoNothing(): pass,但是我的动作有其他方法,不需要重写这些方法)。