在创建新实例时,是否会再次声明python中的类变量?

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

但是,我担心它没有给出答案:(

Dan*_*iel 9

我看到在创建第一个实例p1时,nextIdNum被赋值为0.

这是错的.nextIdNum定义类时,将指定为0.