不同放置位置下pylint各类注释/标注的作用域规则是什么?
pylint注释的作用域判定规则及场景对照
核心通用判定规则
所有位置的pylint: disable注释的作用域都可以通过3条通用规则快速判定,无需逐场景死记:
- 与代码写在同一代码行的行内pylint注释,作用域仅覆盖当前这一行代码,不会扩散到相邻行。
- 独立成行、不依附任何代码的pylint注释,作用域覆盖当前注释之后、和注释本身缩进层级一致的所有后续代码,直到遇到同缩进的
pylint: enable=xxx、同缩进的代码块结束、或是文件末尾才终止。 - 写在类定义、函数定义行末尾的行内pylint注释,作用域覆盖该类/函数的全部内部代码,不受内部代码缩进层级变化的影响,直到类/函数的定义块结束。
示例中各标注位置的具体作用域
结合给出的示例代码,7个标注位置的生效范围分别对应:
- 位置(1):位于导入区之后、独立成行、零缩进。按照规则,它会覆盖这行注释之后所有零缩进的后续代码,包括后续的类定义、顶层函数定义,直到出现同缩进的
pylint: enable=something或者文件结束。 - 位置(2):位于类定义行之前、独立成行、零缩进。作用域和位置(1)逻辑一致,覆盖这行注释之后所有零缩进代码——因为类定义行本身是零缩进,因此它也会覆盖MyClass类的定义行本身,以及后续MyClass块结束前的所有零缩进代码。
- 位置(3):直接写在
class MyClass:定义行的末尾(行内注释)。按照规则,它会覆盖整个MyClass类的全部内部代码,不管类内部的方法、方法内的代码缩进多深,只要属于MyClass类的代码块范围,都会被该规则生效,直到类块结束。 - 位置(4):位于MyClass类内部、独立成行、类内一级缩进。作用域覆盖从这行注释开始、同缩进层级的后续代码——会覆盖MyClass里后续的所有类内一级代码(比如类属性、方法定义),如果后续没有出现同缩进的
pylint: enable=something,会一直作用到类块结束。 - 位置(5):和
print("HI")代码在同一行的行内注释。按照规则,它的作用域仅覆盖当前这一行的print代码,对__init__的其他代码、类内其他方法没有任何影响。 - 位置(6):位于文件后半部分、独立成行、零缩进。作用域覆盖这行注释之后所有零缩进的后续代码,包括后面的myfunc函数定义行、myfunc内部的全部代码,直到文件结束或者同缩进的enable指令出现。
- 位置(7):直接写在
def myfunc(num):定义行的末尾(行内注释)。按照规则,它会覆盖整个myfunc函数的全部内部代码,不管函数内部缩进多深,只要属于myfunc函数块的代码,都会被该disable生效,直到函数块结束。
内容的提问来源于stack exchange,提问作者samuelbrody1249
相关产品推荐
相关产品推荐

