Je commence à travailler la programmation orientée objet en Python, et je bute sur un élément fondamental qui est l'instanciation de ma classe. Il me semble qu'en java, on crée un fichier par classe, et pour instancier une classe il faut même créer une nouvelle classe, donc un nouveau fichier, appelée main. Peut-être n'est-ce en fait pas obligatoire, mais il me semble que cela devient nécessaire quand on commence à travailler sur des projets volumineux. Il m'a donc semblé naturel de retrouver cette façon de faire en python. Et c'est là que j'ai entendu éclater un rire diabolique chaque fois que j'ai voulu exécuter mon fichier d'instanciation qui importe ma classe.
J'ai une classe appelée NewRandomForestModel dans le fichier newrandomforestmodel.py (est-ce bien la typographie recommandée ?). Ce fichier est dans mon dossier personnel Documents/.../Projet.
Je crée un nouveau fichier dans le même dossier, par exemple test.py, pour y instancier ma classe. Dans test.py, je fais donc :
from newrandomforestmodel import NewRandomForestModel
On se doute bien comme c'est que le début de l'histoire que ça donne une erreur :
ModuleNotFoundError: No module named 'newrandomforestmodel'
J'ai essayé les orthographes de différentes versions Python, avec ou sans point, ou encore en créant un fichier __init__.py qui contient la ligne :
from . import newrandomforestmodel
Rien n'y a fait. Après quelques recherches (en fait 2h infructueuses), je tombe sous le choc lorsque j'apprends que l'importation de modules locaux est un pan à part entière de Python, qui nécessite d'abord d'obtenir quelques ceintures pour y avoir recours dans le cadre d'un projet propre et distribuable.
J'ai donc laissé pour l'instant de côté l'idée d'apprendre à faire des packages, et j'ai essayé d'ajouter le chemin de mon fichier test dans la liste des chemins que python va suivre lorsque je lui demanderai d'importer quelque chose :
Je pense que pour l'erreur qui se produit en essayant d'importer ta classe c'est du au répertoire de travail courant.
Pour répondre à ta question c'est évidemment très facile d'intancier une classe dans un autre fichier vue que tu va importer la classe il faut juste le faire dans le répertoire de travail courant ou changer le répertoire de travail avant l'importation exemple :
import os
print(os.getcwd())#Le répertoire courant
#pour changer le répertoire
os.chdir("")
#tu mets le chemin du module entre les guillemets
Le nom que tu donnes dans from blabla import chose Python va chercher le fichier blabla.py dans le répertoire courant. Tu peux avoir une fonction, variable ou classe du même nom dans ce fichier, Attention, je me suis déjà fait jouer un tour. Il existe un fichier copy.py dans la bibliothèque standard de Python. J'avais créé un fichier copy.py dans mon répertoire courant. C'est le mien quePython a pris en premier. C'est la règle. Il faut donc éviter d'appeler des fichiers du même nom que ceux de la bibliothèque standard.
Le Tout est souvent plus grand que la somme de ses parties.
__file__ n'est valable que dans un fichier, dans l'interpréteur python, cette erreur est normale car il ne peut pas donner de nom de fichier puisque le code est saisi dans l'interpréteur.
Instancier une classe dans un autre fichier
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Le Tout est souvent plus grand que la somme de ses parties.