0

This is spam.py:

  class Spam:
        numInstances = 0
        def __init__(self):
            Spam.numIntances = Spam.numInstances + 1
        def printNumInstances():
            print("Number of instances created: %s" % Spam.numInstances)

This is another file.py:

from spam import Spam
a = Spam()
b = Spam()
c = Spam()

Spam.printNumInstances()

a.printNumInstances()

Why does it print "Number of instances created: 0" instead of "Number of instances created: 3"?

  • possible duplication of [link](https://stackoverflow.com/questions/68645/are-static-class-variables-possible-in-python) – Reznik Oct 13 '19 at 10:25

1 Answers1

0

You got some typos and printNumInstances should be a classmethod.

class Spam:
    numInstances = 0

    def __init__(self):
        Spam.numInstances = Spam.numInstances + 1

    @classmethod
    def printNumInstances(cls):
        print("Number of instances created: %s" % cls.numInstances)


a = Spam()
b = Spam()
c = Spam()

Spam.printNumInstances()
a.printNumInstances()

Output:

Number of instances created: 3
Number of instances created: 3
Maurice Meyer
  • 17,279
  • 4
  • 30
  • 47