如何从不同的文件继承类?

时间:2016-10-25 10:20:03

标签: python inheritance jupyter-notebook

我有两个文件:

  

fig.py

import math
PI=math.pi

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

并且

  

circle.py

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

但是我试图加载它们每当我尝试它时 jupyter-notebook 会抛出错误:

  

NameError:名称'Fig'未定义

我尝试在 circle.py 的开头使用import fig但它不起作用,也没有运行这两个文件。它们都在同一目录中。

4 个答案:

答案 0 :(得分:11)

好吧,由于你还没有准确地发送给我们你正在做的事情,但不清楚是什么出错了,但这是我的猜测。如果您的circle.py文件如下

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

这会打破,因为python不知道在哪里找Fig。相反,如果你写了

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

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

一切都应该运转正常。这是因为您要么告诉python它可以访问类的名称空间(我的第一个解决方案)或显式导入类(我的第二个解决方案)。如果您想使用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 

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

答案 1 :(得分:2)

您需要在 circle.py 中执行from fig import FIG。另外,请确保文件夹中包含<{em> circle.py 和 fig.py __init__.py文件。

请同时查看:

答案 2 :(得分:0)

您需要从Fig的{​​{1}}导入课程fig.py

如果您只是导入模块circle.py,则必须通过相应的命名空间访问类fig

Fig

如果您想直接使用班级名称,请使用class Circle(fig.Fig): <snip>

将其导入

答案 3 :(得分:0)

from packagename.fig import Fig

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

packagename是您的实际包裹名称。