python - 忘记 self 限定符 : how to catch this mistake?

标签 python debugging self

我理解为什么 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/

相关文章:

python - 正则表达式转义正则表达式

python - 如何正确创建具有所需大小和分辨率(PNG、JPG、JPEG)的新图像?

Python子进程仅将stdout Popen到变量

debugging - VS Code 无法正确设置断点

JavaScript 不报告错误

javascript - 在声明期间访问对象中的先前值

python - 无法在 python 应用程序的 app.yaml 中设置缓存过期

debugging - 为什么 printf() 会阻止崩溃的发生?

Ruby:使用 self 关键字从内部调用私有(private)方法

ruby-on-rails - Rails-belongs_to 和 has_many(同一类)-如何访问父级和子级