2

I am trying to make a toy singleton in python to learn the ins and outs of the language and am running into a problem with how python works. I declare the class like this

class ErrorLogger:
  # Singleton that provides logging to a file  
  instance = None

  def getInstance():
    # Our singleton "constructor"
    if instance is None :
      print "foo"

when I call it with

log = ErrorLogger.getInstance()

I get

 File "/home/paul/projects/peachpit/src/ErrorLogger.py", line 7, in getInstance
    if instance is None :
 UnboundLocalError: local variable 'instance' referenced before assignment

What is going on here, shouldn't instance be statically assigned Null? What would be the right way to do this?

1

1 Answer 1

5

You have to call it with ErrorLogger prefix as it is a static variable.

class ErrorLogger:
  # Singleton that provides logging to a file  
  instance = None

  @staticmethod
  def getInstance():
    # Our singleton "constructor"
    if ErrorLogger.instance is None :
      print "foo"
Sign up to request clarification or add additional context in comments.

2 Comments

You can also use @classmethod, the differences are subtle but still there.
An advantage of @classmethod is that you'd get the class as an argument to the method, so you could use it to grab the singleton directly: @classmethod def getInstance(cls): if cls.instanece is None: ...

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.