11
votes

Définir des classes dans des packages

J'apprends Python et je joue avec des packages. Je voulais connaître la meilleure façon de définir des cours dans des packages. Il semble que le seul moyen de définir des classes dans un package soit de les définir dans le __ init __. Py de cet emballage. En venant de Java, je voudrais un peu de définir des fichiers individuels pour mes cours. Est-ce une pratique recommandée?

J'aimerais que mon répertoire soit un peu comme ceci: xxx

afin que je puisse donc faire référence à mes classes comme recursor.recursor , recursor.recursionException et recursor.recursionresult . Est-ce faisable ou recommandé en python?


3 commentaires

Obligatoire: Python n'est pas Java


Consultez également Stackoverflow.com/Questtions/2339371/...


Oui, vous pouvez, mais non, vous ne devriez pas.


3 Réponses :


2
votes

Ceci est parfaitement faisable. Créez simplement un nouveau module de classe pour chacune de ces classes et créez exactement la structure que vous avez postée.

Vous pouvez également faire un module Récursion.py ou quelque chose de similaire, et inclure les 3 classes dans ce fichier.

(Je suis aussi nouveau à Python de Java, et je n'ai rien mis dans mon __ init __. py fichiers ...)


2 commentaires

Si je crée la mise en page d'annuaire ci-dessus, la définition de ma classe recursor dans le fichier Recursor.py et je tente d'importer « recursor.Recursor, » je reçois un ImportError. Qu'est-ce que je fais mal?


@RFKRockTK - Vous devrez peut-être spécifier Recursor.Recursor.Recursor ... le premier pour le colis, le second pour le module (le fichier) et le troisième pour la classe actuelle ... (Il est parfois préférable d'envisager d'utiliser des modules En tant que packages ... au lieu d'un correcteur de colis avec ces 3 classes sous forme de fichiers distincts, vous pouvez avoir un récurseur de module avec ces 3 classes à l'intérieur)



1
votes

Dans Python, vous n'êtes pas limité à définir 1 classe par fichier et peu de choses. Vous pouvez si vous voulez bien - c'est totalement à vous de décider. Un paquet de python n'est qu'un répertoire avec un fichier xxx

. Vous n'avez rien à mettre dans ce fichier dans ce fichier, vous pouvez contrôler ce qui est importé, etc.


0 commentaires

10
votes

Allez-y et définissez vos classes dans des modules distincts. Ensuite, faites __ init __. Py faire quelque chose comme ceci: xxx

qui importera chaque classe dans l'espace de noms root du package, le code d'appel peut donc se référer à Recursor. Recurseur au lieu de recursor.recursor.recursor .

Je ressens la nécessité d'echo certains des autres commentaires ici, cependant: Python n'est pas Java. Plutôt que de créer un nouveau module pour chaque classe sous le soleil, je vous suggère de regrouper des classes étroitement liées à un seul module. Il est plus facile de comprendre votre code de cette façon, et le code d'appel n'a pas besoin de bazillions importations.


1 commentaires

Bien que recursor.recursor.recursor a un certain charme.