Não se trata @staticmethod
e @classmethod
! Eu sei como staticmethod
funciona. O que eu quero saber é os casos de uso adequados para @staticmethod
uma função no nível do módulo.
Pesquisei essa questão no Google e parece que há algum consenso geral de que as funções no nível do módulo são preferidas aos métodos estáticos, porque é mais pitônico. Os métodos estáticos têm a vantagem de estar vinculados à sua classe, o que pode fazer sentido se apenas essa classe a usar. No entanto, no Python, a funcionalidade geralmente é organizada por módulo e não por classe; portanto, também faz sentido que seja uma função do módulo.
Os métodos estáticos também podem ser substituídos por subclasses, o que é uma vantagem ou desvantagem, dependendo de como você olha para ele. Embora os métodos estáticos sejam geralmente "funcionalmente puros", a substituição pode não ser inteligente, mas às vezes pode ser conveniente (embora possa ser um desses tipos de coisas "convenientes, mas NUNCA FAÇA") que somente a experiência pode ensinar).
Existe alguma regra geral para o uso do método static ou do módulo? Que vantagens ou desvantagens concretas elas têm (por exemplo, extensão futura, extensão externa, legibilidade)? Se possível, forneça também um exemplo de caso.