忘记自我限定:如何抓住这个错误?

max*_*max 1 python debugging self

我理解为什么Python self在引用实例属性时需要显式限定符.

但我经常忘记它,因为我在C++中不需要它.

我用这种方式介绍的错误有时候很难捕捉到; 例如,假设我写

if x is not None:
    f()
Run Code Online (Sandbox Code Playgroud)

代替

if self.x is not None:
    f()
Run Code Online (Sandbox Code Playgroud)

假设属性x通常None,所以f()很少叫.并且假设f()仅产生微妙的副作用(例如,数值的改变,或清除缓存等).除非我有疯狂的单元测试,否则这个错误很可能会长时间被忽视.

我想知道是否有人知道编码技术或IDE功能可以帮助我捕获或避免这种类型的错误.

Amb*_*ber 5

不要将实例属性命名为与globals/locals相同的内容.

如果没有同名的全局/本地,global "foo" is not defined当您尝试访问时会遇到错误self.foo但忘记了self..

作为推论:给你的变量描述性的名字.不要命名所有内容x- 这不仅会使您拥有与属性同名的变量的可能性大大降低,而且还使您的代码更易于阅读.