Pergunta

Estou acostumado com o modelo de Java onde você pode ter uma aula pública por arquivo. Python não tem essa restrição, e eu estou querendo saber qual é a melhor prática para a organização de classes.

Foi útil?

Solução

arquivo

A Python é chamado de "módulo" e é uma maneira de organizar o seu software para que ele faz "sentido". Outra é um diretório, chamado de um "pacote".

Um módulo é uma coisa distinta que pode ter uma ou duas dúzias de aulas estreitamente relacionadas. O truque é que um módulo é algo que você vai importar, e você precisa que a importação seja perfeitamente razoável para as pessoas que vão ler, manter e estender o seu software.

A regra é esta: um módulo é a unidade de reutilização .

Você não pode reutilizar facilmente uma única classe. Você deve ser capaz de reutilizar um módulo sem quaisquer dificuldades. Tudo na sua biblioteca (e tudo o que você baixar e adicionar) é um módulo ou um pacote de módulos.

Por exemplo, você está trabalhando em algo que lê planilhas, faz alguns cálculos e carrega os resultados em um banco de dados. O que você quer que seu programa principal para olhar como?

from ssReader import Reader
from theCalcs import ACalc, AnotherCalc
from theDB import Loader

def main( sourceFileName ):
    rdr= Reader( sourceFileName )
    c1= ACalc( options )
    c2= AnotherCalc( options )
    ldr= Loader( parameters )
    for myObj in rdr.readAll():
        c1.thisOp( myObj )
        c2.thatOp( myObj )
        ldr.laod( myObj )

Pense na importação como a maneira de organizar seu código em conceitos ou pedaços. Exatamente quantas aulas estão em cada importação não importa. O que importa é a organização global que você está retratando com suas declarações import.

Outras dicas

Uma vez que não há nenhum limite artificial, ele realmente depende do que é compreensível. Se você tem um monte de bastante curto, classes simples que são logicamente agrupadas, atirar em um monte deles. Se você tiver grandes, aulas de complexos ou classes que não fazem sentido como um grupo, ir um arquivo por classe. Ou escolher algo no meio. Refactor como mudar as coisas.

Acontece que como o modelo Java para seguinte motivo o. Colocando cada classe em um arquivo individual promove a reutilização, fazendo aulas mais fácil de ver quando se navega o código fonte. Se você tem um monte de classes agrupadas em um único arquivo, pode não ser óbvio para outros desenvolvedores que existem classes lá que pode ser reutilizado simplesmente por navegar do projeto estrutura de diretórios . Assim, se você acha que sua classe pode, eventualmente, ser reutilizado, eu iria colocá-lo em seu próprio arquivo.

Depende inteiramente de quão grande é o projeto é, quanto tempo as classes são, se eles serão usados ??de outros arquivos e assim por diante.

Por exemplo, eu muitas vezes usam uma série de classes para dados de abstração -. Por isso pode ter 4 ou 5 classes que só pode ser uma linha longa (class SomeData: pass)

Seria estúpido para dividir cada uma delas em arquivos separados - mas desde que eles podem ser usados ??de diferentes arquivos, colocando tudo isso em um arquivo separado data_model.py faria sentido, para que eu possa fazer from mypackage.data_model import SomeData, SomeSubData

Se você tem uma classe com lotes de código nele, talvez com algumas funções só ele usa, seria uma boa idéia para dividir essa classe e os auxiliares-funções em um arquivo separado.

Você deve estruturar-los de modo que você faz from mypackage.database.schema import MyModel, não from mypackage.email.errors import MyDatabaseModel -. Se onde está a importar coisas fazem sentido, e os arquivos não são dezenas de milhares de linhas, você organizou-lo corretamente

O Python Módulos documentação tem algumas informações úteis sobre a organização de pacotes.

Eu encontro-me coisas dividindo-se quando eu ficar irritado com a grandeza de arquivos e quando a estrutura desejável de arranques parentesco a surgir naturalmente. Muitas vezes, essas duas etapas parecem coincidir.

Pode ser muito chato se você dividir as coisas muito cedo, porque você começa a perceber que é necessária uma ordem totalmente diferente da estrutura.

Por outro lado, quando qualquer arquivo .java ou .py é chegar a mais de cerca de 700 linhas de eu começar a ficar irritado constantemente tentando lembrar onde "que determinado bit" é.

Com Python / Jython dependência circular de declarações de importação também parece desempenhar um papel: se você tentar dividir muitos cooperantes blocos básicos de construção em arquivos separados esta "restrição" / "imperfeição" da língua parece forçá-lo a grupo coisas, talvez em vez de uma forma sensata.

Como a divisão em pacotes, eu realmente não sei, mas eu diria que, provavelmente, a mesma regra de aborrecimento e surgimento de obras de estrutura felizes em todos os níveis de modularidade.

Eu diria para colocar quantas aulas podem ser agrupados logicamente nesse arquivo sem torná-lo muito grande e complexo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top