1. Official Python Documentation, The Python Standard Library, Section: Built-in Functions. The documentation for classmethod states: "A class method receives the class as an implicit first argument, just like an instance method receives the instance... Class methods are different from C++ or Java static methods. If you want those, see staticmethod()". This supports using @classmethod for methods that operate on the class.
Source: Python.org, The Python Standard Library, classmethod. Available at: https://docs.python.org/3/library/functions.html#classmethod
2. Official Python Documentation, The Python Tutorial, Section 9. Classes. Section 9.3.5, "Class and Instance Variables," explains the distinction between variables shared by all instances (class variables) and variables unique to each instance. The numberOfCrosswords is a class variable. Methods operating on such variables are typically class or static methods.
Source: Python.org, The Python Tutorial, 9.3.5. Class and Instance Variables. Available at: https://docs.python.org/3/tutorial/classes.html#class-and-instance-variables
3. MIT OpenCourseWare, 6.0001 Introduction to Computer Science and Programming in Python, Fall 2016. Lecture 8 on Object-Oriented Programming discusses class variables and instance variables. It establishes that class variables are shared among all instances of a class. Methods that primarily interact with these shared, class-level attributes are logical candidates for the @classmethod decorator.
Source: MIT OpenCourseWare, Lecture 8: Object Oriented Programming, Section on "Class Variables". Available at: https://ocw.mit.edu/courses/6-0001-introduction-to-computer-science-and-programming-in-python-fall-2016/