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

D1X*_*D1X 7 python inheritance jupyter-notebook

我有两个文件:

fig.py

import math
PI=math.pi

class Fig:
    def __init__(self):   
        self.name= " "
Run Code Online (Sandbox Code Playgroud)

circle.py

class Circle(Fig):
    def __init__(self, radius):
        self.name= "Circle"
        self.data= ["Radius: ", radius]
Run Code Online (Sandbox Code Playgroud)

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

NameError:名称'Fig'未定义

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

Ang*_*ams 12

好吧,不清楚是什么问题,因为你没有准确地发送给我们你正在做的事情,但这是我的猜测.如果您的circle.py文件如下

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

这会破坏因为python不知道在哪里找到Fig.相反,如果你写

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

要么

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

一切都应该工作正常.这是因为您要么告诉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 
Run Code Online (Sandbox Code Playgroud)

要么

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
Run Code Online (Sandbox Code Playgroud)