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

Python 如何从不同的文件继承类?,python,inheritance,jupyter-notebook,Python,Inheritance,Jupyter Notebook,我有两个文件: 无花果 及 圆圈.py 但我正在尝试加载它们,每当我尝试时,jupyter笔记本会抛出错误: 名称错误:未定义名称“Fig” 我曾尝试在circle.py的beging中使用import fig,但它不起作用,运行这两个文件也不起作用。它们都在同一个目录中。您需要在circle.py中从fig导入fig。另外,请确保在包含circle.py和fig.py的文件夹中存在\uuuu init\uuu.py文件 请同时查看: 好吧,现在还不清楚到底出了什么问题,因为你没有准确地告

我有两个文件:

无花果

圆圈.py

但我正在尝试加载它们,每当我尝试时,jupyter笔记本会抛出错误:

名称错误:未定义名称“Fig”


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

您需要在circle.py中从fig导入fig。另外,请确保在包含circle.py和fig.py的文件夹中存在
\uuuu init\uuu.py
文件

请同时查看:


    • 好吧,现在还不清楚到底出了什么问题,因为你没有准确地告诉我们你在做什么,但我猜是这样的。如果您的
      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]
      

      一切都会好起来的。这是因为您必须告诉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 
      


      您需要从
      circle.py
      中的
      Fig.py
      导入类
      Fig

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

      class Circle(fig.Fig):
          <snip>
      
      类圆(图):
      
      如果要直接使用类名,请使用图导入图中的
      导入它

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

      其中,
      packagename
      是您的实际包名。

      使用这两个选项继承都有效,但前两行不行。如果运行循环,则未定义PI。如果我同时运行这两个命令,就会得到SyntaxError:无效语法。
      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
      
      class Circle(fig.Fig):
          <snip>
      
      from packagename.fig import Fig
      
      class Circle(Fig):
          def __init__(self, radius):
              self.name = "Circle"
              self.data = ["Radius: ", radius]