1

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

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

我以这种方式引入的错误有时非常难以捕捉;例如,假设我写

if x is not None:
    f()

代替

if self.x is not None:
    f()

假设属性x通常是None,所以f()很少被调用。并且假设f()只会产生微妙的副作用(例如,数值的变化,或清除缓存等)。除非我有大量的单元测试,否则这个错误很可能会在很长一段时间内被忽视。

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

4

1 回答 1

5

不要将您的实例属性命名为与全局/本地相同的东西。

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

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

于 2010-08-07T03:57:56.647 回答