【发布时间】:2018-09-07 08:26:24
【问题描述】:
我正在练习以下代码:
class MITPerson(Person): # a subclass of class Person
nextIdNum = 0 # identification number
def __init__(self, name):
Person.__init__(self, name)
self.idNum = MITPerson.nextIdNum
MITPerson.nextIdNum += 1
def getIdNum(self):
return self.idNum
作为参考,这里是超类:
class Person(object): # superclass
def __init__(self, name):
"""Create a person"""
self.name = name
自从我尝试了以下实例以来,我以为我已经知道了这个问题的答案:
p1 = MITPerson('Mark Guttag')
p2 = MITPerson('Billy Bob Beaver')
p3 = MITPerson('Billy Bob Beaver')
毫不奇怪,当我在控制台中输入这些内容时:
在[12]:p1.getIdNum()
输出[12]:0
在[13]:p3.getIdNum()
输出[13]:2
我已阅读这篇文章并在此处检查了所有出色的答案: Static class variables in Python
我看到在创建第一个实例 p1 时将 nextIdNum 分配为 0。 我觉得奇怪的是为什么不 p2 和 p3 也将 nextIdNum 再次绑定到 0 呢? 在我的想象中,一旦创建了 MITPerson 类而不调用方法,类变量应该重新分配为 0。
我错过了什么吗?
顺便说一句,我也在这里完成了教程: https://docs.python.org/3.6/tutorial/classes.html#class-objects
但是,恐怕它并没有给出答案:(
【问题讨论】:
-
一个类变量是类的一个属性。除非您更改类对象本身,否则它不会改变。
标签: python class static-variables