Classes vs. módulos em Python


19

O Python possui muitos módulos (como re) que executam um conjunto específico de ações. Você pode chamar as funções deste módulo e obter resultados, e o módulo como um todo tem uma idéia por trás dele (neste caso, lidar com expressões regulares).

As classes parecem fazer quase exatamente a mesma coisa, mas também parecem usar propriedades um pouco mais do que módulos.

De que maneiras os módulos são diferentes das classes? (Eu sei que não posso subclassificar um módulo, mas é isso?) Quando devo usar uma classe em vez de um módulo?


Você está ciente de que, quando você chama métodos de módulo, às vezes o módulo está passando apenas para uma instância de uma classe? Veja, por exemplo, o randommódulo. Não me lembro se isso é verdade re, no entanto.
JSCs

1
Um conceito relacionado a saber - Módulo vs. Pacote?
RBT 23/07

Respostas:


12

Um módulo python nada mais é do que um pacote para encapsular código reutilizável. Módulos geralmente, mas nem sempre, residem em uma pasta com um __init__.pyarquivo dentro dela. Os módulos podem conter funções, mas também classes. Os módulos são importados usando a importpalavra - chave

O Python tem uma maneira de colocar definições em um arquivo e usá-las em um script ou em uma instância interativa do intérprete. Esse arquivo é chamado de módulo; as definições de um módulo podem ser importadas para outros módulos ou para o módulo principal.

Saiba mais sobre os módulos Python nesses links:

https://docs.python.org/2/tutorial/modules.html (Python 2) https://docs.python.org/3/tutorial/modules.html (Python 3)

As classes, por outro lado, podem ser definidas no código principal do aplicativo ou nos módulos importados pelo aplicativo. Classes são o código da Programação Orientada a Objetos e podem conter propriedades e métodos.

Saiba mais sobre as classes Python nesses links:

https://docs.python.org/2/tutorial/classes.html (Python 2) https://docs.python.org/3/tutorial/classes.html (Python 3)


3
Portanto, não é uma coisa ruim ter uma única classe em um módulo, mesmo que essa classe tenha apenas funções? Sinto que nessa situação geralmente devo apenas fazer um módulo sem fazer uma aula. Existe uma regra subjacente sobre quando usar classes em vez de módulos? (Isso é o que eu estou tentando perguntar ... Devo editar a minha pergunta para torná-lo mais claro?)
Pro Q

6
Você pode criar várias instâncias de uma classe, mas não pode criar instâncias de um módulo. Você pode comparar módulos com classes estáticas ou singletons.
Eneko Alonso

1
Os módulos nem sempre residem em uma pasta com um __init__.pyarquivo.
multigoodverse

1
@ProQ Em linguagens como Python, onde você pode ter funções em módulos, em vez de classes (em oposição a, digamos, Java), geralmente é uma boa forma manter apenas as funções estáticas no nível do módulo. Classes implicam instâncias com seu próprio estado.
Turksarama 01/11

-2

Se é um monte de funções puras, por exemplo re, eu as coloco em um módulo. Uso uma classe quando sei que há um estado que quero manter com esse código (por exemplo, um arquivo que é lido uma vez, mas cujos dados são usados ​​por várias das funções).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.