A question about @classmethod
No. Why should there be?
Your problem it's that you're confusing yourself by calling the first argument to the class method self. That implies an instance, but the value is not an instance, it's a class, which is why the convention for a class method is to call the argument cls. That makes it much more obvious that the only things you can do with it are class things, like instantiating an instance, not instance things like setting instance values.
I don't understand what is the @classmethod used for... ...
Python when to use a Classmethod or a staticmethod
I just read the whole blog post. Nearly everything in it is wrong.
The primer in Part 1 is much better than Part 2. There are a few confused or wrong parts in Part 1, but it's not terrible. However, Part 2 is basically nonsense.
More on reddit.comStruggling with @classmethod and staticmethod
A classmethod gets the class instead of the instance as the magic first argument - so we tend to call it cls instead of self. It's usually used for ways to create an object with a different signature to __init__.
staticmethod doesn't take a special first argument at all. It's effectively a normal function that happens to live inside a class for some reason. It's not commonly used in Python since we would just use a module level function most of the time. The analogous feature in, say, Java is much more common because they don't have a concept of a function that isn't attached to some class.
More on reddit.com