2010-07-31 5 views
1

J'ai un module (tools.py) contenant plusieurs classes. Je voudrais les extraire dans son propre paquet "whyteboard.tools", chaque classe étant dans son propre fichier. Cependant, auparavant, je passais d'avoir toutes mes classes dans un répertoire de base à être dans un paquet en dessous de la racine de mon projet, et j'avais des problèmes avec le chargement de fichiers marinés qui avaient été sauvegardés dans l'ancien format. (Voir: https://stackoverflow.com/questions/2121874). Je devais modifier le fichier sys.modules lors du chargement du fichier, puis le supprimer ensuite. méchant ...Division d'un module avec 8 classes dans un package avec chaque classe dans son propre fichier

Quelle est la meilleure façon de faire ce déménagement?

Est-il préférable d'importer aussi chacun de mes cours dans __init__ de l'emballage sinon je dois

from whyteboard.tools.pen import Pen 

au lieu de

from whyteboard.tools import Pen 

Répondre

1

Quelle est la meilleure façon de faire ce mouvement ?

Premier. Ne pas. Classer par fichier ne va rien améliorer, alors pourquoi s'embêter?

avait des problèmes avec le chargement dans les fichiers marinées qui avaient été enregistrés dans l'ancien format

correcte. Vous devez avoir des problèmes de chargement des fichiers marinés dans l'ancien format parce que les noms de classes ont changé. Pourquoi les changer si cela pose problème? Pourquoi?

Si vous devez absolument les changer, vous pouvez essayer quelque chose comme ça pour convertir. Enregistre le patch de singe. Se déplace vers votre nouvelle architecture.

import this.that.module 
import pickle 
import os 
legacy_obj= pickle.load(someFile) 
os.rename(someFile, someFile+".bak") 

import this.that.module.class 
new_obj= this.that.module.class(legacy_obj) 
pickle.save(someFile) 

Il y a un milieu entre 1900 lignes dans un fichier et 8+ fichiers avec plus de 200 lignes chacun. Une seule classe de plus de 200 lignes indique que vous pourriez avoir d'autres problèmes de conception. Vous pourriez vouloir aborder ces premiers avant de créer 8 fichiers de "1 classe chacun". Considérons qu'une classe de 200 lignes peut déjà en faire trop. Vous pourriez vouloir décomposer vos classes pour avoir des responsabilités plus fines. Après avoir fait cela, vous pouvez constater que vous avez quelques modules - chacun avec quelques classes.

Vous pouvez décomposer des collections de classes associées en modules réutilisables. Une approche «classe par dossier» simpliste peut être une mauvaise façon de restructurer cela.

+0

Mes cours deviennent assez longs (1900 lignes!), Je me suis dit qu'il serait préférable de diviser les connexes en leurs propres modules –

2

J'ai généralement vu la initialisation modules .py faire quelque chose comme:

from whyteboard.tools.pen import * 

De cette façon, vous pouvez toujours importer whyteboard.tools et référencer l'une des classes à l'intérieur de ce module sans savoir où ils sont situés. Vous avez simplement besoin de connaître les classes fournies par le paquet whyteboard.tools.

Questions connexes