usage of keyword pass in python
我没有看到在python中使用的关键字
以下是我发现自己使用
这是一个很常见的用法。99%的时间是
1 2 | class MyModuleException(Exception): pass |
在父类上声明方法
如果子类都需要提供某个方法(并且该方法没有默认行为),我通常会在父类上定义它,只是为了文档目的。例子:
1 2 3 4 5 6 7 | 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 |
防止继承方法的默认行为:
我谨慎地使用它,因为通常情况下,如果您不想要父类的方法,它是一个标志,表明您应该重构类层次结构,或者应该在提供该方法的类中混合使用该方法。例子:
1 2 3 4 | class Pig(Animal): def fly(destination): """Pigs can't fly!""" pass |
请注意,更好的解决方案是添加
一种用法是定义一个"存根"类或方法,该类或方法有一个名称,但不做任何事情。可能最常见的情况是定义自定义异常类:
1 2 | class MyCustomException(Exception): pass |
现在您可以引发和捕获这种类型的异常。类只存在于提升和捕获中,不需要与它相关联的任何行为。
以类似的方式,API可以包含"不做任何事情"的函数,这些函数将在子类中被重写:
1 2 3 4 | class SomeComplexAPI(object): # This method may be overridden in subclasses, but the base-class implementation is a no-op def someAPIHook(self): pass |
如果您根本没有定义该方法,
为了补充其他好的答案,我发现自己使用
1 2 3 4 5 6 | if A: if B: ... else: # (added only to make the comment below more readable) # A and not B: nothing to do because ... pass |
本例中的
作为防止默认行为的一种方法(例如)?
1 2 3 | class myClass(MySuper): def overriddenmethod(self): pass # Calls to instances of this class will do nothing when this method is called. |
如果要进行自定义异常,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | >>> class MyException(Exception): ... pass ... >>> raise MyException("error!") Traceback (most recent call last): File"<stdin>", line 1, in <module> __main__.MyException: error! >>> >>> >>> try: ... raise MyException ... except MyException: ... print("error!") ... error! >>> |
在上面的例子中,没有什么需要进入类
1 2 3 4 5 6 7 8 9 10 11 | >>> class MyExcpetion(Exception): ... File"<stdin>", line 2 ^ IndentationError: expected an indented block >>> >>> class MyExcpetion(Exception): ... pass ... >>> |