我理解为什么 Python 在引用实例属性时需要显式 self
限定符。
但我经常忘记它,因为我在 C++ 中不需要它。
我以这种方式引入的错误有时很难发现;例如,假设我写
if x is not None:
f()
代替
if self.x is not None:
f()
假设属性x
通常是None
,所以f()
很少被调用。并且假设 f()
只会产生一个微妙的副作用(例如,数值的变化,或清除缓存等)。除非我进行了大量的单元测试,否则这个错误可能会在很长一段时间内都不会被注意到。
我想知道是否有人知道可以帮助我捕获或避免此类错误的编码技术或 IDE 功能。
最佳答案
不要将您的实例属性命名为与您的全局变量/本地变量相同的东西。
如果没有同名的全局/本地,你会得到一个 global "foo" is not defined
尝试访问时出错 self.foo
但忘了 self.
.
作为一个推论:给你的变量一个描述性的名字。不要给所有东西命名x
- 这不仅大大降低了变量与属性同名的可能性,还使代码更易于阅读。
关于python - 忘记 self 限定符 : how to catch this mistake?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3429073/