[ Note . Be very careful to separate the "Calendar" from the collection of events, and the "Event" - one event on the calendar. There seems to be some kind of confusion in your question.]
There are many changes to the Factory template.
Separate convenience function (e.g. calendarMaker (data))
A separate class (e.g. CalendarParser) that creates your target class (Calendar).
Class level method (e.g. Calendar.from_string).
They have different goals. All this is Pythonic, questions: "What do you mean?" and "what can change?" Value is everything; change is important.
Pythonic convenience features. Languages like Java cannot have floating functions; you have to wrap a lone function in a class. Python allows you to have a lone function without class overhead. A function matters when your constructor does not have state changes or alternative strategies or any memory from previous actions.
Sometimes people define a class, and then provide a convenient function that creates an instance of the class, sets the usual state and strategy parameters and any other configuration, and then calls the only appropriate class method. This gives you both state and flexibility of a standalone function.
The method template is used at the class level, but it has limitations. First, he has to rely on class-level variables. Because they can be confusing, a complex constructor as a static method runs into problems when you need to add functions (for example, in terms of state or alternative strategies). Make sure that you are never going to extend the static method.
Two, this more or less does not apply to the rest of the methods and attributes of the class. This from_string type is one of many alternative encodings for your Calendar objects. Perhaps you have from_xml , from_JSON , from_YAML and again and again. None of this matters the least for what IS calendar is or what it does. These methods are related to how the calendar is encoded for transmission.
What you'll see in mature Python libraries is that factories are separate from the things they create. Coding (like strings, XML, JSON, YAML) is subject to much more or less random changes. The essential, however, rarely changes.
Separate two issues. Keep the encoding and presentation as far away from state and behavior.