cin*_*ndy 2 python class static-variables
我正在练习以下代码:
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
Run Code Online (Sandbox Code Playgroud)
作为参考,这里是超类:
class Person(object): # superclass
def __init__(self, name):
"""Create a person"""
self.name = name
Run Code Online (Sandbox Code Playgroud)
我以为我已经知道了这个问题的答案,因为我尝试了以下实例:
p1 = MITPerson('Mark Guttag')
p2 = MITPerson('Billy Bob Beaver')
p3 = MITPerson('Billy Bob Beaver')
Run Code Online (Sandbox Code Playgroud)
毫不奇怪,当我将它们输入控制台时:
在[12]中:p1.getIdNum()
出[12]:0
在[13]中:p3.getIdNum()
出[13]:2
我已经阅读了这篇文章,并在这里检查了所有优秀答案: Python中的静态类变量
我看到在创建第一个实例p1时,nextIdNum被赋值为0.我觉得奇怪的是,为什么p2和p3还没有将nextIdNum再次绑定到0?在我的想象中,一旦创建了类MITPerson而不调用该方法,就应该将类变量重新赋值为0.
我错过了什么?
顺便说一句,我也在这里阅读教程:https: //docs.python.org/3.6/tutorial/classes.html#class-objects
但是,我担心它没有给出答案:(