Em python, é considerado melhor definir um módulo com funções ou um módulo com uma classe que contém funções? [fechadas]

13

No meu código, uma das duas opções acima funcionaria igualmente bem, mas estou interessado em descobrir os prós e contras de ambas as abordagens.

TK100
fonte

Respostas:

9

Honestamente, depende de suas necessidades. Na maioria das vezes, um módulo de funções será o que você está procurando.

Classes Python (imho) não devem ser pensadas como classes em C # ou C ++ ou Java; é preciso haver um motivo lógico para agrupar um conjunto de funções em um pai maior; as estruturas de dados seriam um bom exemplo disso, você deseja um conjunto congruente de funções que se aplicam diretamente à classe em vez de um conjunto de funções vagamente coletadas que são de uso geral.

  • Módulo de funções: finalidade geral, utilidade e mais funções "globais"
  • Módulo de classe de funções: classes agrupadas de necessidades semelhantes, diferentes tipos de dados de lista vinculada ou funções de processamento de áudio ou diferentes tipos de árvore.

Um módulo é para o agrupamento hierárquico geral de sistemas similares. Normalmente, tenho todas as funções utilitárias em um único módulo, todos os dados em outro, minha camada de dados e conectores em um módulo do tipo mais "pai". Como um módulo é apenas um agrupamento mental, trata-se menos de quais tipos de sistemas estão nele (classes ou funções, honestamente provavelmente uma mistura dos dois) e mais sobre as conexões lógicas entre os sistemas no módulo.

Jeff Langemeier
fonte
6
Eu não entendo o contraste entre uma classe Python e outras linguagens. Em qual idioma você teria uma classe com funções que não têm nenhuma razão lógica para serem agrupadas?
Guy Sirton 26/01
7

A questão básica é se você precisa ter instâncias diferentes do seu módulo / classe. um módulo python é como um singleton - você sempre se refere ao mesmo objeto, ou seja, se precisar de instâncias, precisará de uma classe.

No entanto, se você não precisar de instâncias, poderá ainda precisar configurar seu "objeto" para um estado inicial. Embora isso seja claramente possível com um módulo simples, se a inicialização for mais complexa do que apenas definir alguns valores, aconselho que você inicie o código no __init__método de uma classe para facilitar a leitura.

kr1
fonte
2
pode valer a pena ressaltar que você provavelmente está falando sobre algo que possui estado, por exemplo, um módulo com variáveis ​​globais versus uma classe com variáveis ​​membros. se sua classe possui apenas métodos, mas não possui estado, há poucas razões para ter várias instâncias
thbusch
3
@ thbusch, sim, isso está implícito na necessidade de instâncias .
kr1
Quando você falou sobre a necessidade de uma instância que me fez entender módulo vs classe. Como se eu precisasse fazer vários carros, uma classe seria apropriada versus um módulo de calculadora, onde não preciso fazer várias calculadoras, só preciso usar os métodos de adição e subtração desse módulo.
Tazboy # 30/18