Python 中关键字 pass 的用法

16 浏览
0 Comments

Python 中关键字 pass 的用法

这个问题已经有了答案

如何使用 \"pass\" 语句?

我在 Python 中很少看到关键字 pass 的使用,除了偶尔出现的异常,例如在这里:为什么 \"except: pass\" 是一种糟糕的编程实践?是否有其他可接受/允许使用的 pass 使用示例?

admin 更改状态以发布 2023年5月21日
0
0 Comments

以下是我发现自己使用 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() 方法。

0
0 Comments

一个用途是定义一个“存根”类或方法,它有一个名称但不执行任何操作。可能最常见的情况是定义一个定制的异常类:

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 定义它可以确保即使它不执行任何操作,您也可以安全地调用它。

0