【发布时间】:2016-12-18 02:04:34
【问题描述】:
我正在从 Java 迁移到 Python。在 Java 中,静态变量将返回相同的值给一个类的所有对象,即使它被同一个类的另一个对象更改。作者说,在我正在阅读的 Python 书中,如果数据成员的赋值发生在类定义的直接范围内,则将其输入到类命名空间中。
我使用的是 Python 解释器 IDLE,下面是 Python 代码:
class ABC:
OVRLIMIT_FEE=5
>>> a=ABC()
>>> b=ABC()
>>> a.OVRLIMIT_FEE+=1
>>> a.OVRLIMIT_FEE
6
>>> b.OVRLIMIT_FEE
5
但是如果它进入了类命名空间,当它被a和b访问时,它应该不会返回相同的值吗?
【问题讨论】:
-
虽然你提到了java,但这个问题与它完全无关
-
您正在更改对象属性而不是 ABC 的属性,请执行
ABC.OVRLIMIT_FEE+=1然后您将得到 6 个 -
如果您分配给
a.OVRLIMIT_FEE(就像您对a.OVRLIMIT_FEE+=1所做的那样),您将在a上创建一个实例变量。如果要访问类变量,请使用ABC.OVRLIMIT_FEE。 -
为什么这被标记为重复?引用的问题询问“静态”变量的存在,这是关于它们的特定行为的问题。诚然,答案也涵盖了这个问题。
标签: python class namespaces static-variables