web-dev-qa-db-fra.com

Comment hériter d'une classe d'un fichier différent?

J'ai deux fichiers:

fig.py

import math
PI=math.pi

class Fig:
    def __init__(self):   
        self.name= " "

Et

cercle.py

class Circle(Fig):
    def __init__(self, radius):
        self.name= "Circle"
        self.data= ["Radius: ", radius]

Mais j'essaie de les charger chaque fois que je l'essaie jupyter-notebook jette l'erreur:

NameError: le nom 'Fig' n'est pas défini

J'ai essayé d'utiliser import fig au début de circle.py et cela ne fonctionne pas, ni l'exécution des deux fichiers. Ils sont tous deux dans le même répertoire.

6
D1X

Ok, on ne sait pas très bien ce qui ne va pas parce que vous ne nous avez pas envoyé ce que vous faites, mais voici ce que je suppose. Si votre fichier circle.py est comme suit

import fig
class Circle(Fig):
    def __init__(self, radius):
        self.name= "Circle"
        self.data= ["Radius: ", radius]

Cela va casser parce que python ne sait pas où trouver Fig. Si vous écrivez à la place 

import fig
class Circle(fig.Fig):
    def __init__(self, radius):
        self.name= "Circle"
        self.data= ["Radius: ", radius]

ou 

from fig import Fig
class Circle(Fig):
    def __init__(self, radius):
        self.name= "Circle"
        self.data= ["Radius: ", radius]

Tout devrait bien fonctionner. En effet, vous devez soit indiquer à python l’espace de nom à travers lequel il peut accéder à la classe (ma première solution), soit l’importer explicitement (ma deuxième solution). La même logique s'applique si vous souhaitez utiliser PI:

import fig
class Circle(fig.Fig):
    def __init__(self, radius):
        self.name= "Circle"
        self.data= ["Radius: ", radius]
        #use PI from fig.py by informing python of namespace
        self.circumference = 2.*fig.PI*radius 

ou

from fig import Fig, PI
class Circle(fig):
    def __init__(self, radius):
        self.name= "Circle"
        self.data= ["Radius: ", radius]
        #PI is now explicitly imported so don't need namespace
        self.circumference = 2.*PI*radius
10
Angus Williams

Vous devez faire from fig import FIG dans votre circle.py . Assurez-vous également que le fichier __init__.py est présent dans le dossier contenant circle.py et fig.py .

Veuillez aussi regarder:

2
Moinuddin Quadri

Vous devez importer la classe Fig à partir de fig.py dans circle.py.

Si vous importez simplement le module fig, vous devez accéder à la classe Fig via l'espace de noms respectif:

class Circle(fig.Fig):
    <snip>

Si vous souhaitez utiliser directement le nom de la classe, importez-le à l'aide de from fig import Fig.

0
Richard Neumann