Python 中关键字 pass 的用法
Python 中关键字 pass 的用法
这个问题已经有了答案:
我在 Python 中很少看到关键字 pass
的使用,除了偶尔出现的异常,例如在这里:为什么 \"except: pass\" 是一种糟糕的编程实践?是否有其他可接受/允许使用的 pass 使用示例?
admin 更改状态以发布 2023年5月21日
以下是我发现自己使用 pass
的几种情况:
重命名一个类
这是一个非常普遍的用法。99% 的情况是 Exception
类,因为这是避免引发/捕获普通异常的最简单方法。例如:
class MyModuleException(Exception): pass
在父类中声明方法
如果子类都需要提供某个方法(而该方法没有默认行为),我经常会将其定义在父类中,仅出于文档目的。例如:
class Lifeform(object): def acquire_energy(source, amount): """ All Lifeforms must acquire energy from a source to survive, but they all do it differently. """ pass
防止继承方法的默认行为:
我很少使用这个功能,因为一般来说,如果你不想要父类的方法,那么这意味着你应该重新设计类层次结构或者应该有一个混合类提供该方法。例如:
class Pig(Animal): def fly(destination): """Pigs can't fly!""" pass
请注意,更好的解决方案是添加一个 CapableOfFlight
混合类并删除 Animal.fly()
方法。
一个用途是定义一个“存根”类或方法,它有一个名称但不执行任何操作。可能最常见的情况是定义一个定制的异常类:
class MyCustomException(Exception): pass
现在你可以引发和捕获这种类型的异常。该类仅存在于被引发和捕获,不需要与之相关的任何行为。
类似地,API可以包含“不执行任何操作”的函数,这些函数旨在在子类中重写:
class SomeComplexAPI(object): # This method may be overridden in subclasses, but the base-class implementation is a no-op def someAPIHook(self): pass
如果您根本没有定义该方法,则 SomeComplexAPI().someAPIHook()
会引发异常,因为该方法不存在。使用 pass
定义它可以确保即使它不执行任何操作,您也可以安全地调用它。