I'm fairly new to Python, so I don't know if the following is me abusing the programming language idioms, or simply a mistake of my IDE code inspection routine.
I have a singleton Map class which is defined like so: class Map: _instance = None def __new__(cls): if Map._instance is None: Map._instance = super(Map, cls).__new__(cls) return Map._instance def __init__(self, filename): # Instantiates from the contents of a binary file I am now trying to add another way of constructing an instance of this class. (I need to be able to create a dirty empty instance that is going to be used by the separate map editor script). I added the following method to the class definition, above: @classmethod def generate(cls, width, height, fill=terrain[6]): if Map._instance is None: Map._instance = super(Map, cls).__new__(cls) else: raise Exception('Cannot generate an instance of Map.') Map._instance.author = None Map._instance.name = None Map._instance.description = None # etc... self.cells = [Cell(fill)] * width * height return Map._instance The following code runs just fine. But PyCharm flags the assignment with a warning telling me that generate() does not return anything and the I lose code completion on the mmap variable. if __name__ == '__main__': mmap = Map.generate(12, 24) print(mmap.width, mmap.height, mmap.author) I need to understand if this is just a glitch of the IDE or I am doing indeed something that is frowned upon and ended up caught in a misleading static analysis warning. -- https://mail.python.org/mailman/listinfo/python-list