Python:不鼓励使用静态变量吗?
Python: are static variables discouraged?
我正在阅读有关静态变量(即 class 变量)、静态方法、class 方法以及所有这些的细微差别的信息。在 C++ 等语言中,static variables are generally strongly discouraged because of many IMO compelling reasons. I was just curious, if the Python community has a known position on static variables being discouraged. The Google Python Style Guide does not seem to have a pro/con position on static variables.
在 Python 语言中,是否不鼓励使用静态变量(即代码味道不好)?
Google C++ 风格指南的声明“[static variables] cause hard-to-find bugs”似乎不仅适用于 C++ 语言,而且适用于 Python 语言。
在某些语言中,例如 Java,静态变量可能会导致可测试性问题,因为它们不容易模拟出来。在 Python.
中情况并非如此
但是,静态变量和 class 变量的好处较少,因为当您的值或函数不需要访问特定实例的成员时,您可以只在模块中定义它们级别,并在不参考 class 的情况下使用它们——Java.
等语言无法提供的奢侈品
所以我会说 static
本身不是代码味道。但是如果你一半的变量是 static
那么我会问一些关于你对 OO 设计的理解的问题。
您正在阅读的 C++ 资源讨论的是 class 类型和 static storage duration 类型的变量。这些与静态变量不同;例如,以下变量也有静态存储持续时间:
Example x;
namespace whatever {
Example y;
}
void foo() {
static Example z;
}
这些在 C++ 中是危险的,因为它们的初始化和销毁顺序是不可预测的并且容易出错。
Python没有静态存储期限的变量。它甚至根本没有存储期限。它有(模块)全局变量和静态变量,但它们的初始化顺序比 C++ 定义得更精确。 C++ 问题不太可能发生,除非你有一个循环导入,即使那样,循环导入也是问题所在,而不是全局或静态变量。
也就是说,可变的全局状态,例如您在程序过程中发生变异的全局变量或静态变量,对 language-independent reasons 不利。这与 C++ 对静态存储持续时间的问题完全不同。您不打算改变的全局变量和静态变量通常没问题。
我正在阅读有关静态变量(即 class 变量)、静态方法、class 方法以及所有这些的细微差别的信息。在 C++ 等语言中,static variables are generally strongly discouraged because of many IMO compelling reasons. I was just curious, if the Python community has a known position on static variables being discouraged. The Google Python Style Guide does not seem to have a pro/con position on static variables.
在 Python 语言中,是否不鼓励使用静态变量(即代码味道不好)?
Google C++ 风格指南的声明“[static variables] cause hard-to-find bugs”似乎不仅适用于 C++ 语言,而且适用于 Python 语言。
在某些语言中,例如 Java,静态变量可能会导致可测试性问题,因为它们不容易模拟出来。在 Python.
中情况并非如此但是,静态变量和 class 变量的好处较少,因为当您的值或函数不需要访问特定实例的成员时,您可以只在模块中定义它们级别,并在不参考 class 的情况下使用它们——Java.
等语言无法提供的奢侈品所以我会说 static
本身不是代码味道。但是如果你一半的变量是 static
那么我会问一些关于你对 OO 设计的理解的问题。
您正在阅读的 C++ 资源讨论的是 class 类型和 static storage duration 类型的变量。这些与静态变量不同;例如,以下变量也有静态存储持续时间:
Example x;
namespace whatever {
Example y;
}
void foo() {
static Example z;
}
这些在 C++ 中是危险的,因为它们的初始化和销毁顺序是不可预测的并且容易出错。
Python没有静态存储期限的变量。它甚至根本没有存储期限。它有(模块)全局变量和静态变量,但它们的初始化顺序比 C++ 定义得更精确。 C++ 问题不太可能发生,除非你有一个循环导入,即使那样,循环导入也是问题所在,而不是全局或静态变量。
也就是说,可变的全局状态,例如您在程序过程中发生变异的全局变量或静态变量,对 language-independent reasons 不利。这与 C++ 对静态存储持续时间的问题完全不同。您不打算改变的全局变量和静态变量通常没问题。